【问题标题】:Read a Command Line Flag from a compiled binary从已编译的二进制文件中读取命令行标志
【发布时间】:2019-06-15 17:25:43
【问题描述】:

我创建了一个简单的程序,在其中设置了 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

【问题讨论】:

    标签: go


    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多