为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MMTTMM 2022-09-26 15:44:21
我想嵌入隐藏的文件,在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


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信