去:'不允许使用内部包裹'当运行从github存储库派生的Go项目时

时间:2017-10-21 06:06:41

标签: github go

我已经习惯了Go,并试图了解它是如何运作的。

所以我试图从我的存储库zoonoo / go-ethereum运行测试代码,从原始存储库ethereum/go-ethereum分叉。

当我在go test .目录下运行eth时,出现以下错误:

eth/api.go:37:2: use of internal package not allowed

第37行eth / api.go如下:"github.com/ethereum/go-ethereum/internal/ethapi"

这是否意味着当您分叉存储库时,您必须更改代码中所有依赖项的路径以运行代码?
Go包系统是否支持存储库fork?

2 个答案:

答案 0 :(得分:8)

another Go project所示:

  

克隆分支

     

如果您希望使用InfluxDB的fork,例如您自己的fork,您仍然必须遵循上面的目录结构。但不是克隆主仓库,而是克隆你的叉子。按照以下步骤使用fork:

export GOPATH=$HOME/gocodez
mkdir -p $GOPATH/src/github.com/influxdb
cd $GOPATH/src/github.com/influxdb
git clone git@github.com:<username>/influxdb
  

保留目录结构$ GOPATH / src / github.com / Influxdb是必要的,以便Go导入正常工作。

用您的项目替换InfluxDB名称/ URL,并应用相同的想法。

在您的情况下,GitHub前叉仅用于将您的贡献推回给它,并从中发出Pull请求。
它不会成为go get工作的来源,因为这些软件包不会与您的GitHub匹配repo URL。

答案 1 :(得分:4)

这是因为go中的内部包只能由同一目录根中的包导入。它有点像java中的包私有类。如果要编辑代码而不必重命名所有包导入,则需要维护包期望的相同文件夹结构,以便在 $ GOPATH 中将github.com/zoonoo/go-ethereum重命名为{ {1}}或创建符号链接并改为使用链接目录。