代码之家  ›  专栏  ›  技术社区  ›  Marc Bernier

使用-X ldflag调试问题

go
  •  0
  • Marc Bernier  · 技术社区  · 6 年前

    我有这样一个围棋程序:

    package main
    
    import "fmt"
    
    var version string
    
    func main() {
        fmt.Printf("Version %s\n", version)
    }
    

    版本 在编译时,如所示 here ,所以我以这种方式构建它(wtf.go在src/wtf中):

    go build -ldflags "-X wtf/main.version=1.0.0.1234" wtf
    go install wtf
    

    版本 是空字符串。

    我试过各种各样的 ,包名称和路径的不同变体。看来 开始构建

    我正在为Windows/amd64使用Go v1.10.3。

    1 回复  |  直到 6 年前
        1
  •  1
  •   icza    6 年前

    错误在于,您必须按导入路径指定包,而不是按文件的相对文件夹指定 src 文件夹。所以只要参考你的 version main.version . 有关详细信息,请参阅 How to set package variable using -ldflags -X in Golang build .

    %GOPATH%/src/wtf ,并使用以下命令进行构建:

    go build -ldflags "-X main.version=1.0.0.1234" wtf.go
    

    (或者如果您的源文件中没有其他包) src/wtf 文件夹中,可以省略源文件名。)

    这将放置 wtf.exe 在当前文件夹中。运行它将打印:

    Version 1.0.0.1234
    

    go install 不需要。它将构建应用程序并将可执行二进制文件放入 %GOPATH%/bin ,但那不会有 版本 设置

    如果你想用 %GOPATH%/src/wtf

    go install -ldflags "-X main.version=1.0.0.1234"
    

    还要注意的是 去安装 go build 之前,你不需要运行 去安装 开始构建 . 有关详细信息,请参阅 What does go build build?