//go:embed (влагам) е директива (указание) за компилатора, която позволява програмите
да включват в изпълнимия си файл произволни файлове и папки по време на
изграждането му. Можете да прочетете повече за директивата в документацията ѝ -
(https://pkg.go.dev/embed).
Внесете пакета embed. Ако не ползвате никакви изнесени имена, можете да
внесете пакета без името му, като напишете _ "embed".
import (
"embed"
)
Указанията за embed приемат относителни пътища спрямо папката, в която се
намира изходния файл, в който е съответното указание. Следното указание
влага съдържанието на файла в низовата променлива, обявена веднага под него.
//go:embed folder/single.txt
var fileString string
Съдържанието на файла може да се вложи и в променлива от вид []byte.
//go:embed folder/single.txt
var fileByte []byte
Също така можем да вложим множество файлове или цели папки чрез заместващи знаци (wildcards). Следнното изявление ползва променлива от вида embed.FS (https://pkg.go.dev/embed#FS).
//go:embed folder/single.txt
//go:embed folder/*.hash
var folder embed.FS
func main() {
Извеждаме съдържанието на single.txt.
print(fileString)
print(string(fileByte))
Извличаме съдържанието на файлове от вложената папка.
content1, _ := folder.ReadFile("folder/file1.hash")
print(string(content1))
content2, _ := folder.ReadFile("folder/file2.hash")
print(string(content2))
content3, _ := folder.ReadFile("folder/single.txt")
print(string(content3))
}
Използвайте следните команди за да изпълните примера. (Внимание: поради ограниченията на игралната площадка на Го, този пример може да се изпълни само на вашето сметало.)
$ mkdir -p folder
$ echo "Здрасти, Го." > folder/single_file.txt
$ echo "123" > folder/file1.hash
$ echo "456" > folder/file2.hash
$ go run embed-directive.go
Здрасти, Го.
Здрасти, Го.
123
456
Здрасти, Го.
Следващ пример: Изпитания и бързодействие (Тестове).