如何解决如何通过源代码确定golang模块的版本?
最近,我正在尝试确定 golang 模块的版本。通常,我会在知道主模块版本的情况下下载模块的源代码。但有时其他目录中的子模块很少。和 github.com/hashicorp/consul 一样,它包含两个子模块:hashicorp/consul/sdk 和 hashicorp/consul/api。但是,当我下载github.com/hashicorp/consul(版本:v1.9.1)时,很难确定consul/sdk 和consul/api 的版本,因为go.mod 文件不包含有关此模块的任何版本信息。所以,我的问题是如何在 golang 模块中获取子模块的版本?
我阅读了 checksum documents 和 endpoints documents。我想知道是否可以计算源文件的校验和并将其与 golang 数据库中的版本校验和进行比较以确定版本。当我阅读端点 api 时,我认为这种方式有点复杂。
另一个想法是通过 git tag history 来确定版本。但是,我认为这不是一种准确的方法。
解决方法
如果您查看 github.com/hashicorp/consul 的 go.mod
文件,您可以看到版本:
github.com/hashicorp/consul/api v1.8.0
github.com/hashicorp/consul/sdk v0.7.0
(参见例如https://github.com/hashicorp/consul/blob/master/go.mod#L31)
根据您使用的版本,检查该版本的相应 go.mod
文件。
正如@Volker 所说,您的 go.mod
文件可能也有版本。如果不是,您的 go.sum
文件将包含所有依赖项的校验和。
要确定所有版本的依赖项,请尝试使用 go list
工具 (List packages or modules)
例如(包含版本的所有依赖项列表)
% cat go.mod
module github.com/hashicorp/consul
go 1.13
replace github.com/hashicorp/consul/api => ./api ?? replace ➡️ consul/api v1.8.0
replace github.com/hashicorp/consul/sdk => ./sdk ?? replace ➡️ consul/sdk v0.7.0
replace launchpad.net/gocheck => github.com/go-check/check v0.0.0-20140225173054-eb6ee6f84d0a
require (
github.com/Microsoft/go-winio v0.4.3 // indirect
github.com/NYTimes/gziphandler v1.0.1
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e
github.com/armon/go-metrics v0.3.6
github.com/armon/go-radix v1.0.0
github.com/aws/aws-sdk-go v1.25.41
github.com/coredns/coredns v1.1.2
github.com/coreos/go-oidc v2.1.0+incompatible
github.com/digitalocean/godo v1.10.0 // indirect
github.com/docker/go-connections v0.3.0
github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0
github.com/envoyproxy/go-control-plane v0.9.5
github.com/frankban/quicktest v1.11.0 // indirect
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d
github.com/golang/protobuf v1.3.5
github.com/google/go-cmp v0.5.2
github.com/google/go-querystring v1.0.0 // indirect
github.com/google/gofuzz v1.2.0
github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2
github.com/hashicorp/consul/api v1.8.0 ?? replace
github.com/hashicorp/consul/sdk v0.7.0 ?? replace
...
% go list -json -m -u all
{
"Path": "github.com/hashicorp/consul","Main": true,"Dir": "/Users/a18388871/GoProjects/consul","GoMod": "/Users/a18388871/GoProjects/consul/go.mod","GoVersion": "1.13"
}
...
{
"Path": "github.com/grpc-ecosystem/grpc-gateway","Version": "v1.9.0","Time": "2019-05-14T09:07:28Z","Update": {
"Path": "github.com/grpc-ecosystem/grpc-gateway","Version": "v1.16.0","Time": "2020-10-28T10:29:51Z"
},"Indirect": true,"Dir": "/Users/a18388871/go/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.9.0","GoMod": "/Users/a18388871/go/pkg/mod/cache/download/github.com/grpc-ecosystem/grpc-gateway/@v/v1.9.0.mod"
}
{
"Path": "github.com/hashicorp/consul/api","Version": "v1.8.0","Replace": { ??. Replace field describes the replacement module,and its Dir field is set to the replacement's source code
"Path": "./api","Dir": "/Users/a18388871/GoProjects/consul/api","GoMod": "/Users/a18388871/GoProjects/consul/api/go.mod","GoVersion": "1.12"
},"Update": { ??' The -u flag adds information about available upgrades'
"Path": "github.com/hashicorp/consul/api","Version": "v1.8.1","Time": "2020-12-10T20:49:49Z"
},"GoVersion": "1.12"
}
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。