我已经习惯了,GOPATH
但是对于当前的问题,我没有用。我希望能够创建特定于项目的软件包:
myproject/
├── binary1.go
├── binary2.go
├── package1.go
└── package2.go
我尝试了多种方法,但是如何package1.go
在binary1.go
或上工作binary2.go
,以此类推?
例如; 我希望能够import "package1"
然后能够运行,go build binary1.go
并且一切正常,而不会引发在GOROOT
或上找不到该软件包的错误GOPATH
。我之所以需要这种功能,是因为是大型项目。我不想引用多个其他软件包或将它们保存在一个大文件中。
转到依赖项管理摘要:
vgo
如果你使用的版本是: x >= go 1.11
dep
或者vendor
你的go版本是:go 1.6 >= x < go 1.11
x < go 1.6
编辑3:Go 1.11具有vgo
将替换 的功能dep
。
要使用vgo
,请参阅模块文档。TLDR如下:
export GO111MODULE=on
go mod init
go mod vendor # if you have vendor/ folder, will automatically integrate
go build
此方法go.mod
在你的项目目录中创建一个名为的文件。然后,你可以使用构建项目go build
。如果GO111MODULE=auto
设置为,则你的项目不能在中$GOPATH
。
编辑2:供应商方法仍然有效,并且可以正常工作。vendor
主要是手动过程,因为这dep
和vgo
创建。
编辑1:虽然我的旧方法有效,但不再是“正确”的方法。你应使用Go 1.6中默认启用的供应商功能,vgo
或dep
(目前)。见。你基本上是在vendor
目录中添加“外部”或“依赖”程序包;在编译时,编译器将首先使用这些软件包。
成立。GOPATH
通过创建的子文件夹,package1
然后使用import "./package1"
inbinary1.go
和binary2.go
脚本导入,可以导入本地包,如下所示:
binary1.go
...
import (
"./package1"
)
...
因此,我当前的目录结构如下所示:
myproject/
├── binary1.go
├── binary2.go
├── package1/
│ └── package1.go
└── package2.go
我还应该指出,相对路径(至少在go 1.5中)也有效;例如:
import "../packageX"
直到您有两个子文件夹且其中一个引用另一个子文件夹时,此方法才能正常工作。例如,如果package2也是子文件夹,并且它需要package1,则系统将中断。
import "../package1"
相对导入路径是个坏主意。
如果#golang提供了“命名空间”,那么我可以同意“相对导入路径”或“子包”是个坏主意”。
函数名称应以Capitilized关键字开头