Rumah > pembangunan bahagian belakang > Golang > Bagaimana Saya Boleh Membenamkan Fail ke dalam Go Binari Menggunakan `go:embed` dan `go generate`?

Bagaimana Saya Boleh Membenamkan Fail ke dalam Go Binari Menggunakan `go:embed` dan `go generate`?

Susan Sarandon
Lepaskan: 2024-12-18 02:32:10
asal
366 orang telah melayarinya

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

Membenamkan Fail ke dalam Go Binari

Dalam pengaturcaraan, adalah perkara biasa untuk mengedarkan fail boleh laku yang memerlukan sumber tambahan, seperti fail teks. Untuk memudahkan penggunaan dan mengelak daripada mengedarkan berbilang fail, adalah berfaedah untuk membenamkan sumber ini dalam binari itu sendiri.

Membenamkan Fail dengan go:embed (Go 1.16 dan kemudian)

Dengan Go 1.16, arahan go:embed menyediakan kaedah mudah untuk membenam fail:

package main

import "embed"

// Embed the "hello.txt" file as a string
//go:embed hello.txt
var s string

// Embed the "hello.txt" file as a byte slice
//go:embed hello.txt
var b []byte

// Embed the "hello.txt" file as an embed.FS object
//go:embed hello.txt
var f embed.FS

func main() {
    // Read the file contents as a string
    data, _ := f.ReadFile("hello.txt")
    println(string(data))
}
Salin selepas log masuk

Membenamkan Fail dengan go generate (Sebelum Pergi 1.16)

Untuk versi terdahulu Go, go generate menawarkan pendekatan alternatif:

  1. Buat skrip includetxt.go: Skrip ini akan membaca fail teks dan menjana literal rentetan untuk mereka.
  2. Tambahkan go:generate komen ke main.go: Ulasan akan mencetuskan pelaksanaan skrip includetxt.go dan menjana literal rentetan.
  3. Contoh kod:

    main.go

    package main
    
    import "fmt"
    
    //go:generate go run scripts/includetxt.go
    
    func main() {
        fmt.Println(a)
        fmt.Println(b)
    }
    Salin selepas log masuk

    skrip/includetxt.go

    package main
    
    import (
        "io"
        "io/ioutil"
        "os"
        "strings"
    )
    
    // Embed all .txt files as string literals
    func main() {
        fs, _ := ioutil.ReadDir(".")
        out, _ := os.Create("textfiles.go")
    
        for _, f := range fs {
            if strings.HasSuffix(f.Name(), ".txt") {
                out.WriteString(strings.TrimSuffix(f.Name(), ".txt") + " = `")
                f, _ := os.Open(f.Name())
                io.Copy(out, f)
                out.WriteString("`\n")
            }
        }
    }
    Salin selepas log masuk
  4. Kompilasi:

    $ go generate
    $ go build -o main
    Salin selepas log masuk

Tambahan Nota:

  • Pendekatan go generate memerlukan fail teks dikodkan UTF-8.
  • Untuk fail bukan UTF-8, anda boleh menggunakan pengekodan tersuai dalam Skrip includetxt.go.
  • Jenis embed.FS dalam go:embed menyediakan akses kepada fail terbenam menggunakan fail maya sistem.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Membenamkan Fail ke dalam Go Binari Menggunakan `go:embed` dan `go generate`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan