Golang通过github.com回购本地进口不';即使文件在那里也不能工作

Golang通过github.com回购本地进口不';即使文件在那里也不能工作,go,package,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:

我确实理解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
中。。一切似乎都是按照“去”的方式进口的东西,但它似乎没有进口

它特别指出:

Cannot find package name:
C:\Users\user\go\src\github.com\org\project-name\parser(from $GOPATH)

如果我走这条路,项目就在那里,没错!有什么好处?为什么不导入?

一个包有两件事:

  • 一个名字。这是由
    包名称
    声明设置的
  • 导入路径。此路径相对于$GOPATH/src
  • 你应该(不要在这里争论)做以下事情:

  • 导入路径的名称和最后一个组件应该匹配。例如,如果导入路径为“太阳/月亮/星星”,则包名为“星星”。(很多人都弄错了,要么把这个包或文件夹叫做GoStars之类的东西。不要这样做。)

  • 磁盘上的文件夹结构必须与包的导入路径匹配。如果包的导入路径为“whatever/random/noise”,则必须将其置于$GOPATH/src/whatever/random/noise下。或者换一种方式:如果您的代码是$GOPATH/src/ill/do/it/my/own/way,那么包“way”的导入路径是“ill/do/it/my/own/way”

  • 如果你想让你的包成为
    go get
    able,把它放在一个已知的代码宿主上,并通过完整的导入路径导入它。对导入路径的限制可能适用。将包“foo”的代码放在$GOPATH/src/github.com/you/repo/which/deep/folder/structure/foo下,并使用
    import“github.com/you/repo/which/deep/folder/structure/foo”

  • 所有路径和包名称都应为小写


  • 它归结为:不要做任何花哨的事,保持自然。导入路径和文件夹结构必须匹配。

    @Flimzy阅读go文档时,不应使用相对路径真正导入。也许我错了?这是我在大多数地方都能看到的答案,就像是在这样。除此之外,我还见过其他类似于我在这里尝试的项目。i您说您的代码位于
    Users\user\go\src\project name
    中。因此,您应该将其作为
    项目名称
    导入。如果将其导入为
    github.com/org/project name
    ,那么从错误中可以看出,它在
    Users/user/go/src/github.com/org/project name
    “我的项目存在于:Users\user\go\src\project name”下,这是错误的。为什么你偏离了“如何编写围棋代码”告诉你的。将项目放在$GOPATH/github.com/org/project-name下。停止与工具抗争。“我的包名为foo,所以我将其命名为github.com/randomstuff/foo”就是我所说的“编造名称”。用它的实际名称来称呼你的软件包——不要只是编造东西。我不能代表沃克说话,但对我自己来说,我这么做是因为我相信帮助人们成为更好的程序员。填鸭式回答很少能做到这一点。我的目标是永远不要粗鲁,但有时用一个明显的答案回答一个明显的问题,不可避免地会显得粗鲁。我责备非个人的媒介。在这种情况下,答案的每个细节都包含在问题中。更清楚的是,您已经阅读了文档,但仍在继续与工具作斗争。如果沃尔克和我能以“不那么粗鲁”的方式指出这一点,我欢迎你的建议。