Go 语言从 1.16 版本开始引入了一个新的标准库 embed
,可以在二进制文件中引入静态文件
指令:/go:embed
通过一个简单的小实例,来演示将静态文件引入到golang的二进制打包产物中
项目结构
$ tree . ├── main.go └── static └── hello.txt
hello.txt 文件内容
Hello World!
main.go
1、引入静态文件的内容到变量
package main import ( "embed" "fmt" ) // 引入静态文件的内容到变量content //go:embed static/hello.txt var content string // 注意需要这个语句,虽然没有用到,可以引入整个目录的文件 //go:embed static/* var tmplFS embed.FS func main() { fmt.Println(content) }
输出
Hello World!
2、引入整个目录内所有文件
package main import ( "embed" "fmt" ) //go:embed static/* var tmplFS embed.FS func 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的二进制打包产物中,一起发布