`cmd/go`: 文档不同方式的 `go.sum` 填充,

edqdpe6u  于 4个月前  发布在  Go
关注(0)|答案(2)|浏览(36)

你正在使用的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。

n9vozmp4

n9vozmp42#

我们应该等到 #25530 被解决后再记录这个,因为当 go.sum 被填充时,情况和方式会发生变化。
一般来说,尽管如此,您可以在任何时候提交 go.sum 文件:在运行 go mod tidy 和各种构建/测试命令时可以添加或删除条目,但给定版本的条目不会改变。
go mod tidy 应该使用基本上完整的条目集填充 go.sum

相关问题