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
慕田峪7331174
相关分类