Go embed 将资源文件打包到二进制文件中

Go About 1,328 words

embed

Go 1.16中引入了//go:embed指令,将资源文件打包到二进制文件中,并提供访问能力。

可以方便地将配置文件、静态模板等打包到二进制文件夹中,发布时只需要一个二进制文件即可。

接收类型

string[]byteFS

匹配规则

底层使用path.Match进行匹配。

导入 embed

import (
    "embed"
)

string

//go:embed version.txt
var version string

func main() {
    println(version)
}

[]byte

//go:embed version.txt
var version2 []byte

func main() {
    println(string(version2))
}

*

main.go所在目录下所有文件。

//go:embed *
var templateFs embed.FS

dir

template目录下所有文件,但不包含._开头的文件。

//go:embed template
var templateFs embed.FS

dir/*

template目录下所有文件,同样包含._开头的文件,但不包含子文件夹下的._开头的文件。

//go:embed template/*
var templateFs embed.FS

多个 embed

分别定义

//go:embed resource/*
//go:embed template/*
var templateFs embed.FS

合并定义

//go:embed resource/* template/*
var templateFs embed.FS

使用 embed.FS

func main() {
    println(version)
    println(string(version2))
    println(config)
    dir, _ := templateFs.ReadDir("template")
    for i, v := range dir {
        println(i, v.Name(), v.IsDir())
    }

    readDir, _ := templateFs.ReadDir("template/sub1")
    for i, v := range readDir {
        println(i, v.Name(), v.IsDir())
    }

    file, _ := templateFs.ReadFile("template/sub2/d.tmpl")
    println(string(file))

    fs, _ := template.ParseFS(templateFs, "template/sub2/d.tmpl")
    fs.ExecuteTemplate(os.Stdout, "d", nil)

}

文档

https://pkg.go.dev/embed@go1.20.2

Views: 936 · Posted: 2023-10-11

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh