Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Membenamkan Fail ke dalam Binari My Go?

Bagaimanakah Saya Boleh Membenamkan Fail ke dalam Binari My Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-31 21:17:13851semak imbas

How Can I Embed Files into My Go Binaries?

Menggabungkan Fail ke dalam Go Binari

Ingin mengedarkan satu boleh laku yang termasuk fail teks yang diperlukan? Go menyediakan penyelesaian untuk membenamkan fail ke dalam binari, disesuaikan untuk pelbagai platform.

Go 1.16 and Beyond: go:embed Directive

Untuk Go versi 1.16 dan lebih tinggi, manfaatkan arahan go:embed. Ia menawarkan cara yang elegan untuk membenamkan fail:

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 and Later: go generate for Flexibility

Untuk Go versi 1.4 dan seterusnya, anda boleh menggunakan pergi menjana untuk fleksibiliti yang lebih besar. Pendekatan ini melibatkan:

  1. Membuat skrip go yang membaca fail teks dan menjana literal rentetan.
  2. Menggunakan ulasan go:generate dalam fail utama anda untuk menggunakan skrip.

Teknik ini membolehkan membenamkan berbilang fail teks dengan pengekodan keras yang minimum. Contohnya:

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"))
}

Arahan Bina:

$ go generate
$ go build -o main

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membenamkan Fail ke dalam Binari My Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn