如何使用语义版本构建Go Module?

时间:2019-06-18 20:51:08

标签: git go semantic-versioning go-modules

以下是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=

我希望看到标记存储库的语义版本。相反,我得到了虚拟占位符版本。怎么了?

1 个答案:

答案 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