即使文件存在,通过github.com repo进行Golang本地导入也不起作用

时间:2018-09-10 08:44:13

标签: go package

我确实知道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)

如果我走那条路,那项目就正确地在那儿!是什么赋予了?为什么不导入?

1 个答案:

答案 0 :(得分:1)

一个包有两件事:

  1. 一个名称。这是由package thename声明设置的。
  2. 导入 路径。此路径相对于$ GOPATH / src。

您应该(在这里不争论)执行以下操作:

  1. 名称​​ import path 的最后一个组成部分应匹配。例如。如果导入路径为“ sun / moon / stars”,则包名称为“ stars”。 (很多人弄错了,要么打电话给包裹,要么给文件夹打个电话,例如go-stars。不要那样做。)

  2. 您磁盘上的文件夹结构必须与软件包的导入路径匹配。如果程序包的导入路径为“任何/随机/噪声”,则必须将其放置在$ GOPATH / src / whatever / random / noise下。或采用另一种方法:如果您的代码在$ GOPATH / src / ill / do / it / my / own / way中,则软件包“ way”的导入路径为“ ill / do / it / my / own / way” “。

  3. 如果希望打包go get,则将其放在已知的代码托管上,并通过完整的导入路径将其导入。可能会限制导入路径。将软件包“ foo”的代码放在$ GOPATH / src / github.com / you / repo / whatever / deep / folder / structure / foo下,并使用import "github.com/you/repo/whatever/deep/folder/structure/foo"

  4. 导入
  5. 所有路径和包名称都应全部小写。

归结为:不要做任何幻想,保持其自然。导入路径和文件夹结构必须匹配。