使用私有支持文件组织多文件Go项目

时间:2014-02-12 16:26:56

标签: go

answer之后,我创建了以下项目结构:

.
├── bin
├── pkg
└── src
    └── github.com
        └── GITHUB_USERNAME
            └── PROJECTNAME
                ├── lib
                │   └── model.go
                │   └── ... .go
                ├── LICENSE
                ├── README.md
                └── PROJECTNAME.go
  • PROJECTNAME.go包含main
  • model.go包含PROJECTNAME

PROJECTNAME.go我正在导入以下内容:

import(
    'github.com/GITHUB_USERNAME/PROJECTNAME/lib/model'
) 

但是当我运行go build时,我得到了以下错误:

 cannot find package "github.com/GITHUB_USERNAME/PROJECTNAME/lib/model" in any of:
    /usr/lib/go/src/pkg/github.com/GITHUB_USERNAME/PROJECTNAME/lib/model (from $GOROOT)
    /home/USERNAME/go/src/github.com/GITHUB_USERNAME/PROJECTNAME/lib/model (from $GOPATH)

如何正确导入包名称?还有其他策略吗?

3 个答案:

答案 0 :(得分:1)

这里有两件事:

  1. 您在导入期间错过了“项目”。使用github.com/GITHUB_USERNAME/PROJECTNAME/lib/model
  2. Minor:命名包github.com/GITHUB_USERNAME/PROJECTNAME/lib/model“PROJECTNAME”似乎很奇怪。 lib或模型怎么样?

答案 1 :(得分:1)

您的主程序包中的import语句应为

import(
    "github.com/GITHUB_USERNAME/PROJECTNAME/lib/PROJECTNAME"
) 

你说你的model.go使用PROJECTNAME作为包。因此,您实际上并未在导入路径中命名文件。最后一个组件应该是包名。这意味着您可以在lib目录中拥有许多go文件,所有文件都包含PROJECTNAME。

答案 2 :(得分:1)

包导入路径由目录名定义,而不是文件名。

正确的导入路径是"github.com/GITHUB_USERNAME/PROJECTNAME/lib",该文件夹中的所有go文件必须在顶部具有相同的package子句。

package子句后面的标识符是将导入到导入它的包中的标识符。因此,如果它是package foo,您可以在导入代码中通过Bar访问foo.Bar标识符。

按照惯例,作者通常使用导入路径的最后部分作为package名称,因此在这种情况下,您应该在lib下的所有Go文件的顶部放置package lib文件夹中。