Go podle Příkladů: Direktiva embed

//go:embed je direktiva překladače, která programům umožňuje při sestavení zahrnout do Go binárky libovolné soubory a adresáře. Více o direktivě embed si můžete přečíst zde.

package main

Importujeme balíček embed; pokud z tohoto balíčku nepoužíváte žádné exportované identifikátory, můžete použít prázdný import _ "embed".

import (
    "embed"
)

Direktivy embed přijímají cesty relativní k adresáři obsahujícímu zdrojový soubor Go. Tato direktiva vloží obsah souboru do proměnné typu string, která následuje hned za ní.

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

Nebo vložíme obsah souboru do []byte.

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

Pomocí zástupných znaků můžeme vložit i více souborů nebo dokonce adresáře. K tomu slouží proměnná typu embed.FS, která implementuje jednoduchý virtuální souborový systém.

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

Vypíšeme obsah single_file.txt.

    print(fileString)
    print(string(fileByte))

Načteme několik souborů z vloženého adresáře.

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

Pro spuštění příkladu použijte tyto příkazy. (Pozn.: kvůli omezení go playground je možné tento příklad spustit jen na vašem počítači.)

$ 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

Další příklad: Testování a benchmarky.