以下是bash步骤,以使用git repo设置一个新的最小Go模块项目,提交并使用带注释的语义版本标记对其进行标记:
mkdir gotest
cd gotest
git init
go mod init test.org/simple
cat <<EOT >> app.go
package main
import (
"fmt"
"runtime/debug"
)
func main() {
fmt.Println("hello world")
if bi, ok := debug.ReadBuildInfo(); ok {
fmt.Printf("version=%v. sum=%v\n", bi.Main.Version, bi.Main.Sum)
} else {
fmt.Println("Failed to get build info")
}
}
EOT
echo "simple" >> .gitignore
git add go.mod app.go .gitignore
git commit -am "initial commit"
git tag -am "initial semantic version" v0.1.0
快速验证其是否正确标记:
git tag -n
git describe --dirty
构建并运行:
go build
./simple
产生:
hello world
version=(devel). sum=
我希望看到标记存储库的语义版本。相反,我得到了虚拟占位符版本。怎么了?
答案 0 :(得分:1)
go
命令不会查询版本控制来确定您的存储库是否是语义版本(即https://golang.org/issue/29228)的原始签出。
如果您使用某个 other 模块作为主要模块来构建二进制文件,那么go
命令应该知道正在使用哪个版本的您的模块,并且将其嵌入到生成的二进制文件中:
go.mod
:
module example.com/other
require test.org/simple v0.1.0
go build test.org/simple && ./simple