我创建了一个简单的程序,在其中设置了2个标志并进行了构建。如何从已编译的二进制文件中读取这些标志并设置这2个值?
我尝试了多种方式读取文件,但没有找到标志值。
flag.go
var (
name *string
version *int
)
func init(){
name = flag.String("name","test", "a string")
version = flag.Int("version", 1.0, "an int")
}
func main(){
flag.Parse()
fmt.Println("name : ", *name)
fmt.Println("version : ", *version)
}
main.go
func main(){
path := "/Users/____/Desktop/flag"
dat,_ := ioutil.ReadFile(path)
strings.Contains(string(dat),"name")
fmt.Println("%s opened\n", dat)
}
我想从编译的二进制中找到标志值,并将其存储到主程序变量中。像这样
var flagMain =测试 var versionMain = 1.0
答案 0 :(得分:1)
flag.Parse()
是运行时操作。
回读一个嵌入值意味着该值在编译时已嵌入。
参见AgentZombie go-embed-version
作为示例:
go build -o /tmp/versserv -ldflags "-X github.com/AgentZombie/go-embed-version/cmd.Version=foo" server/server.go
然后您可以调用您的二进制文件,该二进制文件可以返回嵌入的值。
GoogleContainerTools/container-diff
commit 367eb42中的PR 304中有相同的想法。
ahmetb/govvv