首頁 > 後端開發 > 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 二進位檔案中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板