首页 > 解决方案 > 从已编译的二进制文件中读取命令行标志

问题描述

我创建了一个简单的程序,在其中设置了 2 个标志并构建它。如何读取这些标志并从编译的二进制文件中设置这两个值?

我尝试以多种方式读取文件,但没有找到标志值。

标志.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

标签: go

解决方案


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

然后你可以调用你的二进制文件,它可以返回嵌入的值。来自PR 304的提交 367eb42
中的 相同想法。 这是自动化的(再次作为示例)GoogleContainerTools/container-diff
ahmetb/govvv


推荐阅读