我确实知道Go对于导入是古怪的,但是我一直尝试遵循约定(我相信),但是我无法导入结构。
项目结构:
/project-name
/parser/main.go
/query/main.go
... Project files in root
我在/parser/main.go
中导出了一个结构:
package parser
type SomeTranslationStuff struct {
ID int `json:"Id"`
Language string `json:"Language"`
}
我希望将其导入/query/main.go
。
我是这样做的:
import (
"github.com/org/project-name/parser"
)
它不会导入-我遇到“在Gopath中找不到包...”。
我的项目位于Users\user\go\src\project-name
下。导入的项目(与该项目相同,通过go get从github导入)确实存在于Users\user\go\src\github.com\org\project-name
中。一切似乎都是按照“ Go”的方式进行的,但是似乎没有导入?
它具体说:
Cannot find package name:
C:\Users\user\go\src\github.com\org\project-name\parser(from $GOPATH)
如果我走那条路,那项目就正确地在那儿!是什么赋予了?为什么不导入?
答案 0 :(得分:1)
一个包有两件事:
package thename
声明设置的。您应该(在这里不争论)执行以下操作:
名称 和 import path 的最后一个组成部分应匹配。例如。如果导入路径为“ sun / moon / stars”,则包名称为“ stars”。 (很多人弄错了,要么打电话给包裹,要么给文件夹打个电话,例如go-stars。不要那样做。)
您磁盘上的文件夹结构必须与软件包的导入路径匹配。如果程序包的导入路径为“任何/随机/噪声”,则必须将其放置在$ GOPATH / src / whatever / random / noise下。或采用另一种方法:如果您的代码在$ GOPATH / src / ill / do / it / my / own / way中,则软件包“ way”的导入路径为“ ill / do / it / my / own / way” “。
如果希望打包go get
,则将其放在已知的代码托管上,并通过完整的导入路径将其导入。可能会限制导入路径。将软件包“ foo”的代码放在$ GOPATH / src / github.com / you / repo / whatever / deep / folder / structure / foo下,并使用import "github.com/you/repo/whatever/deep/folder/structure/foo"
所有路径和包名称都应全部小写。
归结为:不要做任何幻想,保持其自然。导入路径和文件夹结构必须匹配。