我已经习惯了,GOPATH但是对于当前的问题,我没有用。我希望能够创建特定于项目的软件包:
GOPATH
myproject/ ├── binary1.go ├── binary2.go ├── package1.go └── package2.go
我尝试了多种方法,但是如何package1.go在binary1.go或binary2.go等等上工作?
package1.go
binary1.go
binary2.go
例如; 我希望能够import "package1"然后能够运行,go build binary1.go并且一切正常,而不会抛出无法在GOROOT或找到包的错误GOPATH。我需要这种功能的原因是针对大型项目。我不想引用多个其他软件包或将它们保存在一个大文件中。
import "package1"
go build binary1.go
GOROOT
转到依赖项管理摘要:
vgo
x >= go 1.11
dep
vendor
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。
go.mod
go build
GO111MODULE=auto
$GOPATH
编辑2:供应商方法仍然有效,并且可以正常工作。vendor主要是手动过程,因为这dep和vgo创建。
编辑1:虽然我的旧方法有效,但不再是“正确”的方法。您应使用Go 1.6中默认启用的 供应商 功能,vgo或dep(目前)。见。您基本上是在vendor目录中添加“外部”或“依赖”程序包;在编译时,编译器将首先使用这些软件包。
找到了。GOPATH通过创建的子文件夹,package1然后使用import "./package1"in binary1.go和binary2.go脚本导入,可以导入本地包,如下所示:
package1
import "./package1"
... import ( "./package1" ) ...
因此,我当前的目录结构如下所示:
myproject/ ├── binary1.go ├── binary2.go ├── package1/ │ └── package1.go └── package2.go
我还要指出,相对路径(至少在go 1.5中)也有效;例如:
import "../packageX"