你正在使用的Go版本是什么( go version
)?
$ go version
go version go1.11.4 darwin/amd64
这个问题在最新版本的发布中是否重现?
1.11.4是最新版本
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/lukasz/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/lukasz/Go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/qs/6r1dd8md22bggtghnmmhlf9m0000gn/T/go-build246619765=/tmp/go-build -gno-record-gcc-switches -fno-common"
你做了什么?
这个问题是通过renovatebot/renovate#3017发现的,我没有找到go.sum
中应该包含的任何细节。
如果在go.mod
中存在依赖项,则go get -d
会用不同的内容填充go.sum
文件。
使用的依赖项
go.mod:
module github.com/prymitive/test
require gopkg.in/yaml.v2 v2.2.2
main.go:
package main
import _ "gopkg.in/yaml.v2"
func main() {}
运行go get
会创建一个go.sum
文件:
$ GO111MODULE=on go get -d
$ cat go.sum
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
如果我从import _ "gopkg.in/yaml.v2"
中删除一行,使其只包含:
package main
func main() {}
删除go.sum
并重新运行go get
:
$ rm go.sum
$ GO111MODULE=on go get -d
$ cat go.sum
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
我将在go.sum
文件中得到一行更少( gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
)。
你期望看到什么?
我希望能够在一致的方式下创建go.sum
,这有助于可重复构建。有关它的文档将有助于管理关于不同情况下如何填充go.sum
行为的预期。我知道这个有用的原因是因为有人提到go.sum
“有点像一个锁文件”,人们应该将其提交到版本控制系统。由于在不同的场景下它以不同的方式填充,所以对我来说不清楚何时应该提交它。在阅读了这一点之后,go mod tidy
确保了所有可能的OS/arch组合的依赖项都被预先设置,在我看来,理想情况下,人们应该在运行完go mod tidy
后才提交 go.sum
,否则某些命令可能会在该文件中生成本地更改。
你看到了什么?
根据从go.mod
导入的哪些依赖项,创建了具有不同内容的x1m23n3。
2条答案
按热度按时间r6l8ljro1#
/cc @bcmills
n9vozmp42#
我们应该等到 #25530 被解决后再记录这个,因为当
go.sum
被填充时,情况和方式会发生变化。一般来说,尽管如此,您可以在任何时候提交
go.sum
文件:在运行go mod tidy
和各种构建/测试命令时可以添加或删除条目,但给定版本的条目不会改变。go mod tidy
应该使用基本上完整的条目集填充go.sum
。