Go за Прикладом: Embed Directive

//go:embed is a compiler directive that allows programs to include arbitrary files and folders in the Go binary at build time. Read more about the embed directive here.

package main

Імпортуйте пакунок embed; якщо ви не використовуєте жодного публічного ідентефікатора з пакунку, ви завжди можете зробити пустий імпорт за допомогою _ "embed".

import (
    "embed"
)

embed директива приймає шлях відносний директорії що містить Go файли. Ця директоива вбудовує зміст файлу у змінну типу string що слідує за директивою.

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

Або вюудувати зміст файлу у зріз ([]byte).

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

Ви такою можете імпортувати багато файлів або навіть папок за допомогою метасимволів. Таке використання потребує змінної типу embed.FS type, яка імплементує просту віртуальну файлову систему.

//go:embed folder/single_file.txt
//go:embed folder/*.hash
var folder embed.FS

Виводимо зміст single_file.txt.

func main() {
    print(fileString)
    print(string(fileByte))

Виводимо зміст файлів з вбудованої папки.

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

Скористайтесь цими командами щоб запустити приклад. (Зауваження: через обмеження тестового майданчику цей приклад може бути запущено лише на локальній машині.)

$ 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

Наступний приклад: Тестування та Вимірювання.