我想嵌入隐藏的文件,在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个赞
该行为已明确记录:
模式不得与包模块外部的文件(如 符号链接)匹配。空目录的匹配项将被忽略。之后,行中的每个模式必须至少匹配一个文件或非空目录。.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 关注
- 113 浏览
添加回答
举报
0/150
提交
取消