1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

go资源内嵌embed

Go官方推出1.16版本特性:内嵌资源到二进制文件

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

go资源内嵌embed

在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