我使用了GOPATH
,但对于当前的问题,它没有帮助。我希望能够创建特定于项目的包:
myproject/
├── binary1.go
├── binary2.go
├── package1.go
└── package2.go
我尝试了多种方法,但如何获得package1。进入
在
二进制文件中工作1。转到
或二进制文件2。去
等等?
例如;我希望能够
导入“pack age1”
,然后能够运行go buildbinary1.go
,并且一切正常,不会抛出在GOROOT
或GOPATH
上找不到包的错误。我需要这种功能的原因是用于大型项目;我不想引用多个其他包或将它们保存在一个大文件中。
也许你正在尝试模块化你的软件包。我假设package1
和package2
在某种程度上是同一个包的一部分,但为了可读性,您将它们拆分为多个文件。
如果前面的案例是您的,您可以在这些多重文件中使用相同的包名称,就像有相同的文件一样。
这是一个例子:
add.go
package math
func add(n1, n2 int) int {
return n1 + n2
}
减去
package math
func subtract(n1, n2 int) int {
return n1 - n2
}
什么都不做。去
package math
func donothing(n1, n2 int) int {
s := add(n1, n2)
s = subtract(n1, n2)
return s
}
我不是围棋专家,这是我在StackOveflow上的第一篇帖子,所以如果你有一些建议,它会受到欢迎。
没有“本地套餐”这样的东西。磁盘上的包组织与包的任何父/子关系正交。包形成的唯一真正的层次结构是依赖关系树,在一般情况下,依赖关系树并不反映目录树。
使用
import "myproject/packageN"
不要无缘无故地与构建系统对抗。在任何非平凡的程序中,每次导入保存十几个字符都不是一个好理由,因为例如,具有相对导入路径的项目是不可获取的。
导入路径的概念有一些重要的属性:
使用相对导入路径,以上都毁了,不要做。
PS:在使用相对导入的Go编译器测试中,在遗留代码中几乎没有位置。ATM,这是支持相对导入的唯一原因。
Go依赖管理摘要:
vgo
如果你的go版本是:x
编辑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:仇杀方法仍然有效并且没有问题。供应商
在很大程度上是一个手动过程,因为dep
和vgo
被创建。
编辑1:虽然我的旧方法有效,但它不再是“正确”的方法。您应该使用Go 1.6中默认启用的供应商功能、vgo
或dep
(目前);见。您基本上是在供应商
目录中添加您的“外部”或“依赖”包;编译后编译器将首先使用这些包。
建立通过创建package1
的子文件夹,然后在binary1中导入
和import./package1“
,我可以用GOPATH
导入本地包。转到二进制文件2。去
这样的脚本:
二进制1。去
...
import (
"./package1"
)
...
所以我当前的目录结构如下所示:
myproject/
├── binary1.go
├── binary2.go
├── package1/
│ └── package1.go
└── package2.go
我还应该注意到相对路径(至少在go 1.5中)也有效;例如:
import "../packageX"
问题内容: 示例问题: 实体: 用户包含姓名和朋友列表(用户参考) 博客文章包含标题,内容,日期和作者(用户) 需求: 我想要一个显示标题的页面以及指向用户朋友的最近10篇博客的链接。我还希望能够通过较旧的条目继续进行分页。 SQL解决方案: 因此在sql land中,它将类似于: 我能想到的GAE解决方案是: 加载用户,循环浏览好友列表并加载其最新博客帖子。最后合并所有博客文章以查找最新的10个
问题内容: 我已经习惯了,但是对于当前的问题,我没有用。我希望能够创建特定于项目的软件包: 我尝试了多种方法,但是如何在或等等上工作? 例如; 我希望能够然后能够运行,并且一切正常,而不会抛出无法在或找到包的错误。我需要这种功能的原因是针对大型项目。我不想引用多个其他软件包或将它们保存在一个大文件中。 问题答案: 转到依赖项管理摘要: 如果您使用的版本是: 或者您的go版本是: 如果您使用的版本是
问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1
问题内容: 我正在学习使用Selenium(v2.20)来领先一些 即将使用它创建浏览器测试的程序员。我想在 陷阱到达之前发现它们,而我却跌入了一个陷阱。 当我创建ChromeDriver时,它始终会弹出“ Google Chrome EULA”并 显示两个按钮:“接受并运行”和“取消”。因为我希望这是一个 自动化测试,所以让用户单击按钮是不可能的。 我查看了Chromium CommandSwi
我已经安装了Android SDK最新版本和Eclipse。但我也想试试Android Studio。 我看过这个和这个帖子,但是那些解决方案改变了Android Studio(一旦下载并安装)使用的SDK实例。我想要的不是下载另一个SDK,当我已经在我的机器上安装了它。
问题内容: 我有一个项目,必须将其部署到无法连接到Internet的客户端Windows系统。我目前在D:\ NODE中有一个文件夹,其中包含node.exe和npm.cmd以及一个node_modules文件夹。为了能够从命令行运行节点,我将D:\ NODE添加到PATH变量中。 我可以将大多数模块本地安装在项目的node_modules内部。但是,只有一个-节点窗口-需要全局安装才能运行。 按