gpt4 book ai didi

go - 使用 ldflags 为二进制文件提供在 golang 中不起作用的版本

转载 作者:行者123 更新时间:2023-12-03 08:07:52 30 4
gpt4 key购买 nike

main.go如下:

package main

func main() {
println("hello world")
}

Makefile如下:

flags=-X main.version=1.5.0

build:
go build -ldflags "$(flags)" -o main main.go

然后我运行make,并得到主文件。

运行 ./main -v 后,我得到:

hello world

为什么不显示1.5.0

go版本是go版本go1.18 darwin/arm64,当我运行go version -m main时,我得到:

main: go1.18
path command-line-arguments
build -compiler=gc
build -ldflags="-X main.version=1.5.0"
build CGO_ENABLED=1
build CGO_CFLAGS=
build CGO_CPPFLAGS=
build CGO_CXXFLAGS=
build CGO_LDFLAGS=
build GOARCH=arm64
build GOOS=darwin

我对ldflags有误解。其工作原理如下:

package main

import (
"fmt"
"os"
)

var (
version string
)

func main() {
args := os.Args
if len(args) == 2 && (args[1] == "--version" || args[1] == "-v") {
fmt.Printf("project version: %s \n", version)
return
}
}
$ ./main -v 
project version: 1.5.0

最佳答案

您使用 ldflags (version) 设置的变量必须在包级别的包中声明。 -v 的处理您必须自己实现。

package main

import "flag"

var version string

func main() {
var vFlag bool
flag.BoolVar(&vFlag, "v", false, "show version")
flag.Parse()

if vFlag {
println(version)
} else {
println("hello world")
}
}
go build -ldflags "-X main.version=1.5.0" -o main main.go
./main -v
# 1.5.0
./main
# hello world

关于go - 使用 ldflags 为二进制文件提供在 golang 中不起作用的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71626755/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com