Go 语言从 1.16 版本开始引入了一个新的标准库 embed,可以在二进制文件中引入静态文件
指令:/go:embed
通过一个简单的小实例,来演示将静态文件引入到golang的二进制打包产物中
项目结构
1 2 3 4 5 |
$ tree . ├── main.go └── static └── hello.txt |
hello.txt 文件内容
1 |
Hello World! |
main.go
1、引入静态文件的内容到变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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) } |
输出
1 |
Hello World! |
2、引入整个目录内所有文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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! } |
将打包产物拷贝到其他任意目录运行,也可以读取到静态文件内容
1 2 3 4 5 6 |
# 编译 $ go build main.go
# 拷贝到其他任意目录运行 ./main Hello World! |
需要注意:
扩展:前后端分离的项目中,可以通过该方式,将前端的打包产物内嵌到golang的二进制打包产物中,一起发布