Go官方推出1.16版本特性:内嵌资源到二进制文件
你好,我是本际云服务器推荐网的小编小本本。Go官方在1.16版本发布了一项新的特性:官方内嵌资源到二进制中,这使得部署变得更加简单。在开发web时,通常需要一些web文件。然而,部署时需要部署一个二进制文件,还需要部署web文件,这可能比较繁琐。

在Go 1.16之前,已经有很多包实现了将内嵌资源文件打包到二进制中,例如https://github.com/gobuffalo/packr。但现在,Go官方也推出了这个特性。下面是一些使用该特性的基本用法:
将文件内容内嵌到变量中
在当前目录中,我们可以将dockerfile内容嵌入到变量f中:
package main
import (
_ "embed"
"fmt"
)
//go:embed Dockerfile
var f string
func main() {
fmt.Println(f)
}
在编译之后,即使dockerfile文件不存在,也能够打印出其内容。
将文件夹内的所有文件内嵌到变量中
接下来,我们可以将目录下的所有文件内嵌到变量fs中。
package main
import (
"embed"
"fmt"
"path/filepath"
)
//go:embed foo
var fs embed.FS
func main() {
files, err := fs.ReadDir("foo")
if err != nil {
fmt.Println(err)
}
for _, file := range files {
d, _ := fs.ReadFile(filepath.Join("foo", file.Name()))
if err != nil {
fmt.Println(err)
}
fmt.Println("File Name:", file.Name(), "Content:", string(d))
}
}
上述代码将目录下的foo目录中的字文件都内嵌到变量fs中。随后,该程序运行时,将打印出该文件夹下每个文件的名称和内容,并支持路径匹配。
稍加注意,路径默认是从mod的目录为根目录开始的,并且它会忽略“.”和“_”开头的文件。不管是windows还是linux,都使用“/”。另外,该特性还支持匹配多个目录,例如“//go:embed foo/*.yaml”。
希望这篇文章能够对大家使用Go进行二进制文件开发以及部署时有所帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7458.html
