我已经习惯了,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:虽然我的旧html" target="_blank">方法有效,但不再是“正确”的方法。您应使用Go 1.6中默认启用的 供应商
功能,vgo
或dep
(目前)。见。您基本上是在vendor
目录中添加“外部”或“依赖”程序包;在编译时,编译器将首先使用这些软件包。
找到了。GOPATH
通过创建的子文件夹,package1
然后使用import "./package1"
in
binary1.go
和binary2.go
脚本导入,可以导入本地包,如下所示:
binary1.go
...
import (
"./package1"
)
...
因此,我当前的目录结构如下所示:
myproject/
├── binary1.go
├── binary2.go
├── package1/
│ └── package1.go
└── package2.go
我还要指出,相对路径(至少在go 1.5中)也有效;例如:
import "../packageX"
问题内容: 如何在Golang + GAE中导入本地软件包? 我想要这样的事情: 清单my_app.go: package1.go的清单: 在这种情况下,我有一个错误,例如: 感谢帮助。 问题答案: 您需要链接或将软件包复制到应用程序目录。 相对于应用程序目录根目录的路径应与导入路径匹配。 要使用package1,您应该将应用程序目录配置为如下所示: 来自https://groups.google
我使用了,但对于当前的问题,它没有帮助。我希望能够创建特定于项目的包: 我尝试了多种方法,但如何获得
问题内容: 来自我曾经通过告诉从甚至直接从控制台安装该版本的lib 的环境,我曾经将供应商的lib的特定版本安装到项目文件夹()中,如下所示: 然后,我通常使用以下命令在项目中导入该软件包的该版本: 现在,我想对做同样的事情。我怎样才能做到这一点?是否可以安装特定版本的软件包?如果是这样,使用集中式,如何导入一个版本而不是另一个版本? 我会做这样的事情: 但是,如何在导入过程中有所作为? 问题答案
问题内容: 例如,我想在一个源文件中同时使用text / template和html / template。但是下面的代码会引发错误。 问题答案: 在规范中阅读有关它的更多信息。
问题内容: 我尝试使用导入本地.json文件。 该文件与我的html文件存储在同一文件夹中。 但是(json)参数为null。 我的代码基本上与此d3.js示例相同 问题答案: 如果您在浏览器中运行,则无法加载本地文件。 但是在命令行上运行开发服务器非常简单,只需将文件放入目录中,然后: (或使用python 3) 现在,在浏览器中,转到(或命令行上显示的所有内容)。 以下用于旧版本的d3:
问题内容: 我可能会丢失一些显而易见的东西,但是无论如何: 当您像在python中那样导入软件包时,您可以直接使用任何子模块/子软件包。例如,这有效: 但是我有自己的软件包,其结构如下: 并且这里相同的逻辑不起作用: 我究竟做错了什么? 问题答案: 您需要导入子模块: 您正在寻找的是。您可以通过将(或)放入来解决它,然后Python就能在其中找到。但我建议使用我的第一个建议。