你正在使用的Go版本是什么( go version
)?
$ go version
go version go1.13.8 linux/amd64
这个问题在最新版本的发布中是否重现?
是的
你正在使用什么操作系统和处理器架构( go env
)?
go env
输出
$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/user/.cache/go-build"
GOENV="/home/user/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/user/go"
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/home/user/.local/share/umake/go/go-lang"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/user/.local/share/umake/go/go-lang/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/tmp/go.mod"
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 -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build847180785=/tmp/go-build -gno-record-gcc-switches"
你做了什么?
鉴于最近的 golang.org/x/crypto
修复,我尝试强制让我的模块使用 v0.0.0-20200220183623-bac4c82f6975
:
// /tmp/go.mod
module tmp
go 1.13
require (
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 // indirect
lib v0.0.0-00010101000000-000000000000
)
replace lib => ./lib
golang.org/x/crypto
被列在我的项目中,因为我依赖的一个模块使用了它:
// /tmp/go.sum
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
// /tmp/main.go
package main
import _ "lib"
func main() {}
假设我不控制 lib
模块:
// /tmp/lib/go.mod
module lib
go 1.13
require golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550
// /tmp/lib/lib.go
package lib
// /tmp/lib/sub/sub.go
package sub
import _ "golang.org/x/crypto/acme"
然而,在构建过程中并不需要它,这可以从 go mod why
中看出。因此,当我执行 go mod tidy
时,它会被删除:
[user@localhost tmp]$ go mod why -m golang.org/x/crypto
# golang.org/x/crypto
(main module does not need module golang.org/x/crypto)
[user@localhost tmp]$ go mod tidy
[user@localhost tmp]$ cat go.mod
你期望看到什么?
// /tmp/go.mod
module test
go 1.13
require (
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 // indirect
lib v0.0.0-00010101000000-000000000000
)
replace lib => ./lib
你看到了什么?
// /tmp/go.mod
module test
go 1.13
require lib v0.0.0-00010101000000-000000000000
replace lib => ./lib
9条答案
按热度按时间4sup72z81#
它不需要构建,这可以从
go mod why
的证据中看出。因此,当我执行go mod tidy
时,它会被删除。这正是
go mod tidy
文档中所描述的操作(https://tip.golang.org/cmd/go/#hdr-Add_missing_and_remove_unused_modules):它会移除不提供任何相关包的未使用模块。
你能提供更多关于为什么想要升级一个不提供任何导入包的模块的详细信息吗?
xfyts7mz2#
这正是
go mod tidy
文档中所记录的操作(https://tip.golang.org/cmd/go/#hdr-Add_missing_and_remove_unused_modules):这不仅仅是在 tip;感谢指正。
您能提供更多关于为什么想要升级一个没有提供任何导入包的模块的详细信息吗?
go.sum
和go.mod
中正在使用的易受攻击的模块。它将我的go.sum
标记为易受攻击,因为它看起来就像是实际用于构建的模块。crypto
是一个传递依赖项,因此其他开发人员很容易在不意识到他们引入了易受攻击版本的情况下引入对sub
的依赖关系。lib
依赖于易受攻击的版本,我希望有一种方法来标记/升级它。6yjfywim3#
它标记了我的
go.sum
,因为它看起来与实际用于构建的模块相同。啊,#33008 可能与之相关。对于不贡献导入包的模块,
go.sum
文件仅应包含go.mod
文件的校验和(而不是完整的源代码),但go mod tidy
中的一个错误导致它在存在源代码的情况下也保留了源代码的校验和。svgewumm4#
由于
crypto
是一个传递依赖,其他开发者很容易在不知情的情况下引入对sub
的依赖,从而引入了易受攻击的版本。确实如此,但我们应该提供一些方法来标记这些依赖项,无论它们是如何引入的(这是#24031)。
0wi1tuuw5#
既然我们知道
lib
依赖于易受攻击的版本,我希望有一种方法来标记/升级它。请注意,如果你真的想要这样做,你可以引入某个包的虚拟导入,以便说服go mod tidy
保留它。(参见http://golang.org/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module.)gzszwxb46#
既然我们已经为其他两个部分提出了问题,让我们将重点放在第三个:你有理由想要保留一个未使用的要求的文档,我们有一个机制来实现这一点(一个虚拟的导入),所以我们应该使这个机制的文档更容易被发现。
h5qlskok7#
在此处有一个 hugo module
require
但未在任何.go
文件中使用(因为我只是提取内容),这是一个有效的用例吗?我可以让它正常工作,但我必须忍受在 vscode 问题选项卡中的 "在此模块中未使用" 警告。vbkedwbf8#
Hugo对模块的使用不受Go项目的支持——我们专注于使用
go build
、go test
等构建和运行Go二进制文件的用例。(我们也没有积极地试图破坏它,但你需要与Hugo维护者讨论任何特定的Hugo问题。)
tgabmvqs9#
@bcmills 很好。谢谢:)