git - 如何使用语义版本构建 Go Module?
问题描述
以下是使用 git repo 设置新的最小 Go 模块项目、提交并使用带注释的语义版本标记对其进行标记的 bash 步骤:
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=
我希望看到我标记存储库的语义版本。相反,我得到了虚拟占位符版本。怎么了?
解决方案
该go
命令不会查询版本控制以确定您的存储库是否是语义版本的原始签出(即https://golang.org/issue/29228)。
如果您使用其他模块作为主模块构建二进制文件,那么该go
命令应该知道正在使用您的模块的哪个版本并将其嵌入到生成的二进制文件中:
go.mod
:
module example.com/other
require test.org/simple v0.1.0
go build test.org/simple && ./simple
推荐阅读
- r - 如何解析R中对应ID的Json
- python - 正则表达式:为什么 '$' 不能与 '\n' 一起使用
- ios - 限制按钮移动(平移和旋转)超出屏幕范围
- jasper-reports - Jasperreports 中没有数据集的简单表格
- java - Json 格式到 Java 对象的映射
- java - 在 Wildfly 服务器上安装 Hive JDBC 驱动程序以创建数据源
- java - -XX:+ExitOnOutOfMemoryError 在 'java.lang.OutOfMemoryError: Direct buffer memory' 上被忽略
- iframe - 如果 src="about:blank",我如何隐藏 iframe?
- r - sprintf():作为参数的小数位数
- c - 如何删除循环链表中的所有数据?