有没有可能在每次编译Go应用程序时自动递增一个次要版本号?

我想在我的程序中设置一个版本号,并设置一个自动递增的部分:

$ myapp -version
MyApp version 0.5.132

是我设置的版本号0.5,132是每次编译二进制文件时自动递增的值.

这在围棋里可以吗?

推荐答案

Go链接器(go tool link)有一个选项,用于设置未初始化字符串变量的值:

-X importpath.name=value
  Set the value of the string variable in importpath named name to

价值. 请注意,在GO1.5之前,此选项有两个单独的参数. 现在它需要在第一个=符号上拆分一个参数.

作为构建过程的一部分,您可以使用以下命令设置版本字符串变量.您可以使用-ldflags将其通过go工具.例如,给定以下源文件:

package main

import "fmt"

var xyz string

func main() {
    fmt.Println(xyz)
}

然后:

$ go run -ldflags "-X main.xyz=abc" main.go
abc

要在构建时将main.minversion设置为构建日期和时间,请执行以下操作:

go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go

如果以这种方式编译而不初始化main.minversion,则它将包含空字符串.

Go相关问答推荐

Go PQ驱动程序无法使用默认架构进行查询

macOS上GoLand 2023.3.4中的代码导航

如何将文件从AWS S3存储桶复制到Azure BLOB存储

mockgen不创建模拟

从使用Golang otelmux检测的Otel跟踪中获取trace_id

如何修复proxyconnect tcp:tls:第一条记录看起来不像tls握手

如何修复 Go 中协议缓冲区定义中重新定义的字段?

Golang Gorm Fiber / argon2.Config 未定义

如何模拟 stripe 需要 webhooks 的捕获事件?

Go 中将 int 切片转换为自定义 int 切片指针类型的函数

Kafka golang 生产者在错误后更改分区计数

Golang Docker Selenium Chrome

将文本文件放入切片然后进行比较

在 Golang 模板中计算时间/持续时间

io.Pipe 使用困难

Golang 工作池实现意外工作

使用反射在 struct 内迭代切片 struct

vs 代码调试 go 测试不通过标志

如何在gorm中处理多个查询

Dynamodb.ScanInput - 不能使用expr.Names()(类型 map[string]*string)作为类型 map[string]string