Go Em Exemplos: Embed Directive

//go:embed é uma diretiva de compilador ou compiler directive que permite programas a inclusão de arquivos e diretórios arbitrários ao binário de Go no momento de build. Leia mais sobre embed directive aqui.

package main

Importação do pacote embed; Se não for utilizado nenhum identificador exportado por esse pacote, é possível usar um import em branco com_ "embed".

import (
    "embed"
)

embed directives aceitam caminhos relativos para o diretório contendo o código fonte de um programa em Go. Esta diretiva embeds ou incorpora o conteúdo do arquivo numa variável string imediatamente após a diretiva.

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

Ou incorporam os conteúdos do arquivo em um []byte.

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

Também é possível incorporar múltiplos arquivos ou até mesmo diretórios com wildcards. Este utiliza a variável do tipo embed.FS, o qual implementa um simples sistema de arquivo virtual.

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

Imprime o conteúdo de single_file.txt.

    print(fileString)
    print(string(fileByte))

Recupera alguns arquivos do diretório incorporado.

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

Utilize estes comandos para executar o exemplo. (Note: devida à limitação no playground Go, este exemplo apenas pode ser executado na sua maquina.)

$ 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

Próximo exemplo: Testing and Benchmarking.