如何在 Go 中嵌入隐藏文件?

我想嵌入隐藏的文件,在Go中嵌入包。例如 git 信息。


例如


package main


import _ "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


MMTTMM
浏览 114回答 1
1回答

守着星空守着你

该行为已明确记录:模式不得与包模块外部的文件(如 符号链接)匹配。空目录的匹配项将被忽略。之后,行中的每个模式必须至少匹配一个文件或非空目录。.git/*//go:embed将提交 ID 放入代码中的更好方法是将其包含在命令行中,例如此处所述。如果您的代码如下所示:go buildpackage mainimport "fmt"var (&nbsp; &nbsp; head string = "development")func main() {&nbsp; &nbsp; fmt.Println(head)}你像这样构建你的二进制文件:go build -ldflags "-X main.head=$(git rev-parse HEAD)"然后运行代码将打印生成代码时的 HEAD 提交 ID。在 中自动执行此类操作是很常见的,如下所示:MakefileCOMMITID = $(shell git rev-parse HEAD)GOLDFLAGS = -X 'main.head=$(COMMITID)'all: exampleexample: main.go&nbsp; &nbsp; go build -ldflags "$(GOLDFLAGS)"clean:&nbsp; &nbsp; rm -f example然后,您只需键入以使用正确的命令行标志构建二进制文件。make
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go