Go 项目未从 github 中提取导入更新

Go project not pulling import updates from github

我有一个包含文件 go.modhello.go 的包 hello 和一个包含文件 go.modsay_things.go 的包 say_things .

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.sumgo 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 代码?

一种通过进行以下更改来更新代码的方法。

在您的 hello 项目中打开您的 go.mod 文件,然后 replace 针对 github.com/user/say_things 编写的 current version 使用您的 [=16] 的最后一次提交哈希=] 项目.

换句话说,在 go.mod 文件中
替换 github.com/user/say_things <current-version>
github.com/user/say_things <last-commit-hash>

最后 运行:

$ go mod tidy
$ go mod vendor

go get 命令下载所需模块的新版本。 例如:

% go get -u all

go: github.com/user/say_things upgrade => v0.0.0-<new hash>

– 下载所有最后一个模块的版本到 $GOPATH/pkg 并升级 go.mod 文件。

❕使用 go-modules 时,更好的方法是向存储库添加版本标签(tag 必须 符合 Semantic Versioning 规格)

git commit -a - m "say_things - some changes"
git tag v1.0.1
git push
git push --tags 

这将允许您在 go.mod

中手动更改版本
module github.com/user/hello

go 1.15

require github.com/user/say_things v1.0.1
% go mod download 

go: finding github.com/user/say_things v1.0.1

,通过版本标签获取需要的版本

% go get github.com/user/say_things@v1.0.1

go: finding github.com/user/say_things v1.0.1
go: downloading github.com/user/say_things v1.0.1
go: extracting github.com/user/say_things v1.0.1