Go 示例: 嵌入指令

//go:embed 是一个 编译器指令,允许程序在构建时将任意文件和文件夹包含在 Go 二进制文件中。有关嵌入指令的更多信息,请 点击此处

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 类型 的变量,它实现了一个简单的虚拟文件系统。

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

打印 single_file.txt 的内容。

    print(fileString)
    print(string(fileByte))

从嵌入的文件夹中检索一些文件。

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

使用以下命令运行示例。(注意:由于 go playground 的限制,此示例只能在本地机器上运行。)

$ 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

下一个示例:测试和基准测试