首页 > 后端开发 > Golang > 如何使用'go:embed”和'gogenerate”将静态文件嵌入到 Go 二进制文件中?

如何使用'go:embed”和'gogenerate”将静态文件嵌入到 Go 二进制文件中?

DDD
发布: 2024-12-25 10:21:17
原创
844 人浏览过

How Can I Embed Static Files into Go Binaries Using `go:embed` and `go generate`?

将静态文件嵌入到 Go 二进制文件中

将静态文件嵌入到 Go 二进制文件中可确保所有必需的文件都捆绑在可执行文件中,从而无需进行外部文件管理。这可以通过 go:embed 指令或 go generated 技术来实现。

使用 go:embed 指令 (Go 1.16 )

从 Go 1.16 开始,可以使用 go:embed 指令将文件直接嵌入到二进制文件中:

//go:embed hello.txt
var s string
登录后复制

这会嵌入以下内容hello.txt 到字符串变量 s 中。

使用 gogenerate

对于旧版本的 Go,您可以使用 gogenerate 结合脚本来嵌入文件。这是一个示例:

文件结构:

  • main.go
  • scripts/includetxt.go(嵌入脚本)
  • a.txt
  • b.txt

main.txt去:

//go:generate go run scripts/includetxt.go
package main

import "fmt"

func main() {
    fmt.Println(a)
    fmt.Println(b)
}
登录后复制

includetxt.go:

package main

import (
    "io/ioutil"
    "os"
    "strings"
)

func main() {
    // Create the output file
    out, _ := os.Create("textfiles.go")
    out.Write([]byte("package main \n\nconst (\n"))

    // Iterate over .txt files in the current directory
    fs, _ := ioutil.ReadDir(".")
    for _, f := range fs {
        if strings.HasSuffix(f.Name(), ".txt") {
            // Write the embedded file contents to the output file
            out.Write([]byte(strings.TrimSuffix(f.Name(), ".txt") + ` = "`))
            f, _ := os.Open(f.Name())
            io.Copy(out, f)
            out.Write([]byte("`\n"))
        }
    }
    // Close the output file
    out.Write([]byte(")\n"))
}
登录后复制

到嵌入文件:

$ go generate
$ go build -o main
登录后复制

textfiles.go(生成):

package main 

const (
a = `hello`
b = `world`
)
登录后复制

这会将 a.txt 和 b.txt 的内容嵌入到二进制文件中作为字符串常量,允许它们在 main.go 中分别作为 a 和 b 进行访问。

以上是如何使用'go:embed”和'gogenerate”将静态文件嵌入到 Go 二进制文件中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板