例如配置文件这些静态文件是不需要经常频繁变动,如果在编译时能一起编译进二进制文件中,就能减少部署时的依赖。在Go 1.16
版本中,引入了embed
包,可以将文件嵌入到 Go 二进制文件中。
package main
import (
"embed"
"io"
"log"
"os"
)
//go:embed database.toml
var configData embed.FS
func main() {
// 创建一个临时文件来保存配置数据
file, err := configData.Open("database.toml")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 将 embed 文件内容复制到目标文件
destFile, err := os.Create("config/database.toml")
if err != nil {
log.Fatal(err)
}
defer destFile.Close()
_, err = io.Copy(destFile, file)
if err != nil {
log.Fatal(err)
}
}
在上述示例中,假设有一个名为database.toml
的配置文件。使用//go:embed
注释将该文件嵌入到 Go 二进制文件中,并通过configData
变量访问嵌入的配置数据。
这样,编译和运行 Go 代码时,配置文件的内容将作为字节切片嵌入到二进制文件中,无需依赖外部配置文件。