导入包的本地更改而不在 Golang 中推送代码
Posted
技术标签:
【中文标题】导入包的本地更改而不在 Golang 中推送代码【英文标题】:Importing local changes of a package without pushing code in Golang 【发布时间】:2017-01-06 00:55:16 【问题描述】:我现在正在学习 Golang,而且还是个新手。我有一个关于包裹的问题。
考虑以下场景:
假设我有一个包github.com/ilatif/A
,我正在其中导入另一个包github.com/ilatif/B
,例如:
import "github.com/ilatif/B"
现在github.com/ilatif/A
和github.com/ilatif/B
都是我的包,我在本地处理它们,有没有办法从github.com/ilatif/B
包中提取更改而不将代码推送到GitHub?根据 Golang 的文档,我需要将代码推送到其相关的仓库,但我想知道是否有这样一种方法可以在不先将其推送到上游的情况下提取我自己的包的本地更改。
谢谢
【问题讨论】:
你不需要推或拉任何东西,它们只是你的 GOPATH 中的文件。 那为什么我的本地更改没有更新?我的 $GOPATH 可能有一些问题?我正在使用 gvm。 如果它们没有被更新,那么你没有在你的 GOPATH 中编辑版本。直接使用 go 工具(没有 gvm)可能更容易理解它们是如何工作的。如果您还没有,请从这里开始:How to Write Go Code 感谢您的评论。顺便说一句,安装在供应商文件夹中的包总是优先于我对包的更改。我很困惑。 是的,vendor/
优先于 GOPATH。这就是为什么我建议只使用 go 工具从基础开始,并在您发现需要时添加其他功能。如果您需要使用供应商目录,则需要更新其中的代码,通常使用 3rd 方工具来执行此操作。
【参考方案1】:
Go 模块解决方案
通过在文件go.mod
中使用替换,我可以成功地将Golang 与模块一起使用。
https://thewebivore.com/using-replace-in-go-mod-to-point-to-your-local-module/
只要您保存带有replace
语句的go.mod
文件,Goland 就会识别更新的模块。
示例
使用replace MODULE_URL => /PATH/TO/MODULE/DIR
无需指定版本
module github.x.com/services-x/x
go 1.13
require (
github.com/briandowns/spinner v1.8.0
github.com/golang/protobuf v1.3.1
github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8
github.com/marcellodesales/cloner v0.0.0-20191126082454-c952bef1e067
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/mapstructure v1.1.2
github.com/sirupsen/logrus v1.2.0
github.com/spf13/cobra v0.0.5
github.com/spf13/viper v1.4.0
github.com/thoas/go-funk v0.4.0
gopkg.in/src-d/go-git.v4 v4.13.1
gopkg.in/yaml.v2 v2.2.2
)
replace github.com/marcellodesales/cloner => /Users/mdesales/dev/github.com/marcellodesales/cloner
【讨论】:
是的,我正在使用相同的解决方案,但有问题让 vs 代码识别这些更改。我相信 Go 语言服务器(gopls)正在某个地方保存一些缓存之王。以上是关于导入包的本地更改而不在 Golang 中推送代码的主要内容,如果未能解决你的问题,请参考以下文章