我已经习惯了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?
答案 0 :(得分:8)
克隆分支
如果您希望使用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}}或创建符号链接并改为使用链接目录。