Go by Example: Embed Directive

//go:embed es una directiva del compilador que permite a los programas incluir archivos y carpetas arbitrarios en el binario de Go en el momento de la compilación. Lee más sobre la directiva embed aquí.

package main

Importa el paquete embed; si no usas ningún identificador exportado de este paquete, puedes hacer una importación en blanco con _ "embed".

import (
    "embed"
)

Las directivas embed aceptan rutas relativas al directorio que contiene el archivo fuente de Go. Esta directiva incrusta el contenido del archivo en la variable string que le sigue inmediatamente.

//go:embed folder/single_file.txt
var fileString string

O incrusta el contenido del archivo en un []byte.

//go:embed folder/single_file.txt
var fileByte []byte

También podemos incrustar múltiples archivos o incluso carpetas con comodines. Esto utiliza una variable del tipo embed.FS, que implementa un sistema de archivos virtual simple.

//go:embed folder/single_file.txt
//go:embed folder/*.hash
var folder embed.FS
func main() {

Imprime el contenido de single_file.txt.

    print(fileString)
    print(string(fileByte))

Recupera algunos archivos de la carpeta incrustada.

    content1, _ := folder.ReadFile("folder/file1.hash")
    print(string(content1))
    content2, _ := folder.ReadFile("folder/file2.hash")
    print(string(content2))
}

Usa estos comandos para ejecutar el ejemplo. (Nota: debido a limitaciones en el playground de Go, este ejemplo solo se puede ejecutar en tu máquina local.)

$ mkdir -p folder
$ echo "hello go" > folder/single_file.txt
$ echo "123" > folder/file1.hash
$ echo "456" > folder/file2.hash
$ go run embed-directive.go
hello go
hello go
123
456

Siguiente ejemplo: Testing and Benchmarking.