Go 바이너리에 정적 파일을 포함하면 필요한 모든 파일이 실행 파일 내에 번들로 포함되어 외부 파일 관리가 필요하지 않게 됩니다. 이는 go:embed 지시문 또는 go generate 기술을 통해 달성할 수 있습니다.
Go 1.16부터 go:embed 지시문을 사용할 수 있습니다. 파일을 바이너리에 직접 포함하려면:
//go:embed hello.txt var s string
이렇게 하면 다음 내용이 포함됩니다. hello.txt를 문자열 변수 s에 추가합니다.
이전 버전의 Go에서는 스크립트와 함께 go generate를 사용하여 파일을 삽입할 수 있습니다. 예는 다음과 같습니다.
파일 구조:
main. 이동:
//go:generate go run scripts/includetxt.go package main import "fmt" func main() { fmt.Println(a) fmt.Println(b) }
includetxt.go:
package main import ( "io/ioutil" "os" "strings" ) func main() { // Create the output file out, _ := os.Create("textfiles.go") out.Write([]byte("package main \n\nconst (\n")) // Iterate over .txt files in the current directory fs, _ := ioutil.ReadDir(".") for _, f := range fs { if strings.HasSuffix(f.Name(), ".txt") { // Write the embedded file contents to the output file out.Write([]byte(strings.TrimSuffix(f.Name(), ".txt") + ` = "`)) f, _ := os.Open(f.Name()) io.Copy(out, f) out.Write([]byte("`\n")) } } // Close the output file out.Write([]byte(")\n")) }
대상 파일 삽입:
$ go generate $ go build -o main
textfiles.go(생성됨):
package main const ( a = `hello` b = `world` )
이렇게 하면 a.txt 및 b.txt의 내용이 바이너리에 포함됩니다. 문자열 상수로, main.go 내에서 각각 a와 b로 액세스할 수 있습니다.
위 내용은 `go:embed` 및 `go generate`를 사용하여 Go 바이너리에 정적 파일을 어떻게 포함할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!