将文件嵌入到Go二进制文件中

· 311字 · 1分钟 · 阅读量

例如配置文件这些静态文件是不需要经常频繁变动,如果在编译时能一起编译进二进制文件中,就能减少部署时的依赖。在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 代码时,配置文件的内容将作为字节切片嵌入到二进制文件中,无需依赖外部配置文件。