目的
Golang编译程序默认是静态编译,会把相关的库都打包到一起,这在分发部署使用时非常方便。不过如果项目中用到的外部的静态资源文件,通常就需要将这些资源和程序一起拷贝分发了。现在可以使用标准库中 embed
包 https://pkg.go.dev/embed 将静态资源文件打包到一起
演示
将文件变成 string
, []byte
package main
import (
_ "embed"
"fmt"
)
// 下面一行像是注释的的内容是一条指令
// 它会将后面指定的文件的内容赋值给下面紧挨着声明的变量
//go:embed file1.txt
var s string
//go:embed subdir/file2.txt
var b []byte
func main() {
fmt.Println(s)
fmt.Println(string(b))
}
将文件变成 FS
package main
import (
"embed"
"fmt"
)
// 下面是embed最好用的功能,把文件放到FS中
//go:embed file1.txt
//go:embed subdir/file2.txt
var f embed.FS
func main() {
data, _ := f.ReadFile("file1.txt")
fmt.Println(string(data))
data, _ = f.ReadFile("subdir/file2.txt")
fmt.Println(string(data))
}
// 嵌入整个目录
//go:embed static/*
var staticFS embed.FS
Golang笔记:使用embed包将静态资源嵌入到程序中 https://blog.csdn.net/Naisu_kun/article/details/130722873