Elastic Beats是一个用 Go 编写的日志传送程序的开源项目。它具有多种日志输出功能,包括控制台、Elasticsearch 和 Redis。我想将我自己的输出添加到 AWS Kinesis。
我已将存储库克隆到~/github/beats,并尝试构建它:
$ cd filebeat; go build main.go
Run Code Online (Sandbox Code Playgroud)
但是,由于缺少作为项目一部分的库,它失败了:
main.go:6:2: cannot find package "github.com/elastic/beats/filebeat/cmd" in any of:
/usr/local/go/src/github.com/elastic/beats/filebeat/cmd (from $GOROOT)
/Users/adam/go/src/github.com/elastic/beats/filebeat/cmd (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)
项目的目录依赖于同一存储库中的包,但不是在层次结构中查找某个目录,而是在GOPATH.
因此,go get github.com/elastic/beats/filebeat/cmd获取了代码,现在go build main.go可以使用了。更改 my 中的代码GOPATH反映在这些构建中。
这给我带来了结构上的不便。我的一些代码位于工作目录中,其中一些位于我的GOPATH工作目录中并包含在我的工作目录中。
出于各种原因,我希望将所有代码放在一个目录中,尤其是将所有内容都置于版本控制之下。
主要是寻找问题所在。我对 Go 很陌生,所以我可能错过了正确的术语。
在 Go 中编辑导入库的代码的正确方法是什么?
在开发使用Go Modules 的项目时,此问题的先前答案已过时。
对于使用Go Modules的项目,可以使用以下命令将导入的库(例如 example.com/imported/module)替换为本地模块(例如 ../local/module):
go mod edit -replace=example.com/imported/module=./local/module
Run Code Online (Sandbox Code Playgroud)
或者通过将以下行添加到go.mod文件中:
replace example.com/imported/module => ./local/module
Run Code Online (Sandbox Code Playgroud)
参考文档:https://golang.org/doc/modules/managing-dependency#unpublished
项目工作副本应检出到$GOPATH/src/package/import/path- 例如,该项目应检出到/Users/adam/go/src/github.com/elastic/beats. 当项目处于正确的位置后,go工具就可以正常对其进行操作了;否则,它将无法正确解析导入。请参阅go help gopath获取更多信息。