【问题标题】:Go language package structureGo语言包结构
【发布时间】:2014-02-06 23:25:38
【问题描述】:

我正在尝试学习 Go 并遵循现有的约定,但是,作为每个约定,您需要先了解它们才能很好地使用它们,并且经过一些研究,我没有找到以下问题的确切答案:

我在$GOPATH 中建立了一个项目,其结构类似:

$GOPATH/
  github.com/
    username/
      projectname/
        main.go
        numbers/
          rational.go
          real.go
          complex.go

我的主要是:

package main

import(
"fmt"
"./numbers"
)

func main() {
    fmt.Println(numbers.Real{2.0})
}

所以,问题是:

  1. 我读到我需要在每个包文件夹中都有一个文件package.go,对吗?

  2. 如果是这样,在numbers.go中,我将如何导入rational.goreal.gocomplex.go

  3. 然后,是否有可能有类似的东西:

    // real.go
    package numbers
    
    type Real struct {
        Number float64
    }
    

...主要做fmt.Println(numbers.Real{2.0}) ?

【问题讨论】:

    标签: go


    【解决方案1】:

    首先:您的安装程序缺少文件夹src:它应该是`$GOPATH/src/github.com/..."

    第二:不要使用相对导入。只是不要这样做。导入包号如import "github.com/username/projectname/number"

    对于您的问题:

    1. 没有。如果文件夹中有 Go 文件,它们会组合到一个包中,但您不必强制将一个包放入所有文件夹中。

    2. 所有文件rational.gocomplex.goreal.go 通常以package numbers 开头。它们都是包号的一部分,您包含文件而是包。不需要导入当前包。所以:没有。

    【讨论】:

    • 实际上,是的,我使用的是src,在第一个问题中,我的意思实际上是packagename.go,但你的帮助真的很有帮助,我注意到我犯了一个愚蠢的错误。非常感谢。
    • 不,包 foo 不需要文件 foo.go。以“package foo”开头的文件 bar.go 很好(但很奇怪)。
    • “不要使用相对导入”,请为什么
    • 不好的做法,不是预期的方式,将来可能行不通,包不再可用。 golang 邮件列表充满了细节。或者看看这里code.google.com/p/go/issues/detail?id=6147
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多