首页 > 后端开发 > Golang > 如何将文件嵌入到我的 Go 二进制文件中?

如何将文件嵌入到我的 Go 二进制文件中?

Linda Hamilton
发布: 2024-12-31 21:17:13
原创
814 人浏览过

How Can I Embed Files into My Go Binaries?

将文件合并到 Go 二进制文件

想要分发包含必要文本文件的单个可执行文件? Go 提供了针对各种平台定制的将文件嵌入二进制文件的解决方案。

Go 1.16 及更高版本:go:embed 指令

对于 Go 版本 1.16 及更高版本,利用去:嵌入指令。它提供了一种优雅的嵌入文件的方式:

import "embed"

//go:embed hello.txt
var s string
print(s)

//go:embed hello.txt
var b []byte
print(string(b))

//go:embed hello.txt
var f embed.FS
data, _ := f.ReadFile("hello.txt")
print(string(data))
登录后复制

Go 1.4 及更高版本:gogenerate 以获得灵活性

对于 Go 版本 1.4 及更高版本,您可以求助于去生成以获得更大的灵活性。此方法涉及:

  1. 创建一个读取文本文件并生成字符串文字的 go 脚本。
  2. 在主文件中使用 go:generate 注释来调用脚本。

此技术可以使用最少的硬编码嵌入多个文本文件。例如:

main.go

package main

import "fmt"

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

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

script/includetxt.go

package main

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

func main() {
    fs, _ := ioutil.ReadDir(".")
    out, _ := os.Create("textfiles.go")
    out.Write([]byte("package main \n\nconst (\n"))
    for _, f := range fs {
        if strings.HasSuffix(f.Name(), ".txt") {
            out.Write([]byte(strings.TrimSuffix(f.Name(), ".txt") + " = `"))
            f, _ := os.Open(f.Name())
            io.Copy(out, f)
            out.Write([]byte("`\n"))
        }
    }
    out.Write([]byte(")\n"))
}
登录后复制

构建命令:

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

以上是如何将文件嵌入到我的 Go 二进制文件中?的详细内容。更多信息请关注PHP中文网其他相关文章!

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