我想嵌入隱藏的文件,在Go中嵌入包。例如 git 信息。例如package mainimport _ "embed"var ( //go:embed .git/HEAD head string)func main() { print(head)}但它發生編譯錯誤。$ go build main.go:6:13: pattern .git/HEAD: cannot embed file .git/HEAD: in invalid directory .git我嘗試了這些方法,但沒有成功。建立符號鏈接并嵌入用雙引號轉義和換行添加這到底是什么意思?files outside the package's module這聽起來不像是關于go模塊的。為什么下面的文件是好的,但不是?.git/*$ mkir .hidden && echo "hello world" > .hidden/hello.txt$ tree -a.|-- .hidden| `-- hello.txt <- is package's module ?|-- go.mod|-- go_embed_git_version`-- main.go和 之間有什么區別?.git/HEAD.hidden/hello.txt
1 回答

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
該行為已明確記錄:
模式不得與包模塊外部的文件(如 符號鏈接)匹配??漳夸浀钠ヅ漤棇⒈缓雎浴V?,行中的每個模式必須至少匹配一個文件或非空目錄。.git/*//go:embed
將提交 ID 放入代碼中的更好方法是將其包含在命令行中,例如此處所述。如果您的代碼如下所示:go build
package main
import "fmt"
var (
head string = "development"
)
func main() {
fmt.Println(head)
}
你像這樣構建你的二進制文件:
go build -ldflags "-X main.head=$(git rev-parse HEAD)"
然后運行代碼將打印生成代碼時的 HEAD 提交 ID。
在 中自動執行此類操作是很常見的,如下所示:Makefile
COMMITID = $(shell git rev-parse HEAD)
GOLDFLAGS = -X 'main.head=$(COMMITID)'
all: example
example: main.go
go build -ldflags "$(GOLDFLAGS)"
clean:
rm -f example
然后,您只需鍵入以使用正確的命令行標志構建二進制文件。make
- 1 回答
- 0 關注
- 139 瀏覽
添加回答
舉報
0/150
提交
取消