当前,我正在尝试调试以太坊(link)的golang实现,因为我的核心兴趣是开发新的共识算法(即,修改来自github的开源Golang代码)。
但是,我在源代码的位置/路径上遇到了问题。当我将文件夹(即go-ethereum
)放在$GOPATH
之外,然后尝试编译和调试geth
(go-ethereum/cmd/geth/main.go
)时,显示以下错误:Use of internal package is not allowed.
< / p>
从该错误消息中,我发现导入github.com/ethereum/go-ethereum
并不是在导入我的源,而是从互联网(如其他库)获取代码。当然,当我尝试修改github.com/ethereum/go-ethereum
程序包代码时,绝对不应该这样做。
因此,我的解决方法是将源代码克隆到$GOPATH/src/github.com/ethereum/go-ethereum
中,然后跟随this answer,然后Goland IDE开始编译和调试而没有错误(尽管由于错误{ {1}})
因此,现在我有了一个可以正常工作的调试器,可以对我的源代码修改进行调试,但这看起来并不像理想的源代码结构。
问题是:
是否由于内部原因而将源代码放入go build ./cmd/geth/main.go
中?如果是这样,如果我正在使用另一个项目中的undefined: configFileFlag...
包怎么办?(幸运的是我没有,但是我很好奇)我是否必须存储并还原对代码所做的更改?
答案 0 :(得分:0)
是的,最后得到的文件夹结构是正确的。
您所描述的代码应位于$GOPATH/src
下。
但是请注意,$GOPATH
不是系统中的固定文件夹,您可以在不同的文件夹下拥有多个项目,并根据要处理的内容相应地更改$GOPATH
的值(或具有多个控制台)终端打开,每个终端都有自己的$GOPATH
值。