main.go如下:package mainfunc main() { println("hello world")}Makefile 如下:flags=-X main.version=1.5.0build: 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 mainimport ( "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
1 回答

慕田峪7331174
TA貢獻1828條經驗 獲得超13個贊
您使用 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
- 1 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消