Golang embed 包详解
embed
包是Go 1.16引入的,它提供了一种将文件系统内容嵌入到Go程序中的方式。使用embed
包,你可以将文件或文件夹作为变量嵌入到Go程序中,并在编译时将其打包进可执行文件。
以下是embed
包的一些常用方法和用法示例:
- 将单个文件嵌入到字节切片中:
package main
import (
"embed"
"io/fs"
)
// 将example.txt文件嵌入到变量中
// 使用"embed"将文件嵌入为一个fs.FS类型
// 通过.ReadFile方法读取文件内容
// 使用"-"指示embed包嵌入当前目录下的所有文件
var content embed.FS
func main() {
files, _ := fs.ReadDir(content, ".")
for _, file := range files {
if file.Name() == "example.txt" {
b, _ := content.ReadFile(file.Name())
println(string(b))
}
}
}
- 将整个文件夹嵌入到
fs.FS
类型中:
package main
import (
"io/fs"
"embed"
)
// 将entire_dir文件夹嵌入到fs.FS类型的变量中
// 使用"embed"将文件夹嵌入为一个fs.FS类型
var content embed.FS
func main() {
subFS, _ := fs.Sub(content, "entire_dir")
files, _ := fs.ReadDir(subFS, ".")
for _, file := range files {
println(file.Name())
}
}
- 使用
_
匹配模式将目录下的所有文件嵌入到fs.FS
类型中:
package main
import (
"io/fs"
"embed"
)
//go:embed entire_dir
var content embed.FS
func main() {
subFS, _ := fs.Sub(content, "entire_dir")
files, _ := fs.ReadDir(subFS, ".")
for _, file := range files {
println(file.Name())
}
}
在这些例子中,我们展示了如何将单个文件、整个文件夹或匹配特定模式的文件集合嵌入到Go程序中。通过这种方式,你可以将静态文件、模板、配置文件或任何其他文件系统内容直接嵌入到Go程序中,使得分发和部署更加便捷。
评论已关闭