Go 语言从 1.16 版本开始引入了一个新的标准库 embed
,可以在二进制文件中引入静态文件
指令:/go:embed
通过一个简单的小实例,来演示将静态文件引入到golang的二进制打包产物中
项目结构
$ tree
.
├── main.go
└── static└── hello.txt
hello.txt 文件内容
Hello World!
main.go
1、引入静态文件的内容到变量
package mainimport ("embed""fmt"
)// 引入静态文件的内容到变量content
//go:embed static/hello.txt
var content string// 注意需要这个语句,虽然没有用到,可以引入整个目录的文件
//go:embed static/*
var tmplFS embed.FSfunc main() {fmt.Println(content)
}
输出
Hello World!
2、引入整个目录内所有文件
package mainimport ("embed""fmt"
)//go:embed static/*
var tmplFS embed.FSfunc main() {// 读取文件内容content, _ := tmplFS.ReadFile("static/hello.txt")fmt.Println(string(content))// Hello World!
}
将打包产物拷贝到其他任意目录运行,也可以读取到静态文件内容
# 编译
$ go build main.go# 拷贝到其他任意目录运行
./main
Hello World!
需要注意:
- 要引入包
embed
//go:embed
是一个整体,双斜杆后面不能有空格,例如:// go:embed
是无效的
扩展:前后端分离的项目中,可以通过该方式,将前端的打包产物内嵌到golang的二进制打包产物中,一起发布
参考
- Go实验室:每周一更|利用embed引入静态文件