【发布时间】:2020-09-03 19:19:31
【问题描述】:
我有一个包hello,其中包含文件go.mod 和hello.go,还有一个包say_things,其中包含文件go.mod 和say_things.go。
hello.go:
package main
import "github.com/user/say_things"
func main() {
say_things.SayBye()
}
say_things.go:
package say_things
import "fmt"
func SayBye() {
fmt.Println("BYE")
}
这两个项目都是 github 项目。当我运行hello.go 时,它会按预期打印“BYE”。我现在将SayBye 更新为:
package say_things
import "fmt"
func SayBye() {
fmt.Println("GO AWAY")
}
并将更改推送到 github。我再次运行hello.go,期待它说“走开”,但事实并非如此。它仍然显示BYE。我再次删除了生成的go.sum 和go run hello.go,但它仍然显示BYE。然后我转到go/pkg/mod/github.com/user/ 并删除say_bye@v0.0.0-<hash>,然后再次运行hello.go。尽管如此,什么都没有改变。接下来,我运行go get github.com/user/say_things,仍然得到BYE。
如何让hello.go 运行更新后的say_hello 代码?
【问题讨论】:
-
运行带有更新标志的 go get 命令:
go get -u github.com/user/say_things以获取更新的包。 -
另外,
go.sum不指定版本,它只记录校验和。go.mod定义了您正在使用的版本。 -
@MuffinTop 帖子里忘记说了,我也做了,没用。
-
@picotard:
go get -u将检查更新,但您在 master 上的随机提交 id 并不构成“更新”。如果你想要一个特定的提交,你需要go get那个提交。 -
一旦您到达
v1.0并在此之后推送新的提交,go get -u将不会获取它们。你必须使用go get foo/bar@master。见Go modules pulls old version of a package。
标签: go versioning dependency-management go-modules