【发布时间】:2023-02-02 10:14:01
【问题描述】:
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 version 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
【问题讨论】:
-
我找到了它不起作用的原因。我可以使用
os.Args来接受-v标志。是对ldflags的误解。
标签: go