导入包的本地更改而不在 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/Agithub.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 中推送代码的主要内容,如果未能解决你的问题,请参考以下文章

Golang- import 导入包的语法(转)

Golang- import 导入包的语法

Golang-go mod 导入本地包

golang导入包的几个说明:import

eclipse我导入了jar包,但是build后里面的class文件都不在啊,这是怎么回事?

Go语言基础之包的概念