Go Embed 嵌入文件
//go:embed 编译时打包静态资源到二进制 · 难度:高级 · +20XP
//go:embed — 单文件部署
Go 1.16+ 的 embed 包可以在编译时将文件或目录嵌入到二进制中。部署时只需一个可执行文件,不再需要携带配置文件、模板文件。
嵌入单个文件
import "embed"
//go:embed config.json
var configData []byte // 嵌入为字节数组
//go:embed version.txt
var version string // 嵌入为字符串
嵌入多个文件
//go:embed templates/*.html
var templates embed.FS // 嵌入整个目录
func main() {
data, _ := templates.ReadFile("templates/index.html")
fmt.Println(string(data))
}
应用场景
- 配置文件:config.json、config.yaml 打包进二进制
- HTML 模板:前端模板嵌入,单文件部署 Web 应用
- 静态资源:CSS/JS/图片嵌入
- SQL 迁移文件:数据库 schema 嵌入
注意:embed 路径是相对于源文件所在目录的,不能嵌入父目录(../)的文件。