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)) }
Membenamkan Fail dengan go generate (Sebelum Pergi 1.16)
Untuk versi terdahulu Go, go generate menawarkan pendekatan alternatif:
Contoh kod:
main.go
package main import "fmt" //go:generate go run scripts/includetxt.go func main() { fmt.Println(a) fmt.Println(b) }
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") } } }
Kompilasi:
$ go generate $ go build -o main
Tambahan Nota:
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!