356 words
2 minutes
Golang embed 程序嵌入文件
概述
Go 编译后是一个 二进制可执行文件,部署非常简单。 在 1.16 版本之后, Go 提供了 embed 包支持编译时嵌入静态文件, 这样就可以直接在程序中访问静态文件的内容了。 结合这两个特性,可以将应用整体打包进一个二进制可执行文件。
常见应用场景
- 将音频、视频文件嵌入小工具内
- 网站的静态资源,比如网站只有少量的静态资源 (icon, 图片,图表等) 文件,可以将这些文件打包进可执行文件
- 应用配置文件直接打包进可执行文件
- 自定义的静态文件服务
测试案例
生成两个文件 server.log
与 client.log
单文件嵌入
注意 //go:embed server.log
没有空格来分割单词和//
。
package main
import (
_ "embed"
"fmt"
)
//go:embed server.log
var log string
func main() {
fmt.Printf("%s\n", log)
}
嵌入文件系统 FS
FS: 表示只读的文件句柄集合
注意
embed
注解的写法。
嵌入单个文件
import (
"embed"
"fmt"
)
//go:embed server.log
var license embed.FS
func main() {
content, err := license.ReadFile("server.log")
if err != nil {
panic(err)
} else {
fmt.Printf("%s\n", content)
}
}
嵌入多个文件
注意
embed
注解的写法。
import (
"embed"
"fmt"
)
//go:embed server.log client.log
var license embed.FS
func main() {
content, err := license.ReadFile("server.log")
if err != nil {
panic(err)
} else {
fmt.Printf("%s\n", content)
}
content, err = license.ReadFile("client.log")
if err != nil {
panic(err)
} else {
fmt.Printf("%s\n", content)
}
}
Golang embed 程序嵌入文件
https://fuwari.vercel.app/posts/golang/embed/