Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go语言包结构_Go - Fatal编程技术网

Go语言包结构

Go语言包结构,go,Go,我正在努力学习围棋并遵循现有的惯例,但是,正如每个惯例一样,在使用它们之前,你需要先了解它们,经过一些研究,我没有找到以下问题的确切答案: 我在我的$GOPATH中设置了一个项目,采用类似的结构: $GOPATH/ github.com/ username/ projectname/ main.go numbers/ rational.go real.go complex.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})
}
因此,问题是:

  • 我读到我需要一个文件
    包。进入每个包文件夹中,对吗

  • 如果是这样,在
    numbers.go
    中,我将如何导入
    rational.go
    real.go
    complex.go

  • 那么,有没有可能有这样的东西:

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

  • 。。。在main do
    fmt.Println(numbers.Real{2.0})

    首先:您的设置错过了文件夹
    src
    :它应该是“$GOPATH/src/github.com/…”

    第二:不要使用相对导入。只是不要这样做。导入软件包编号,如
    Import“github.com/username/projectname/number”

    关于你的问题:

  • 否。如果文件夹中有Go文件,则会将这些文件合并到一个包中,但不会强制将包放入所有文件夹中

  • 所有文件
    rational.go
    complex.go
    real.go
    通常以
    包编号开始。这些文件都是包编号的一部分,您不包括文件,但包括包。不需要导入当前包。因此:否


  • 事实上,是的,我使用的是
    src
    ,在问题1中,我实际上是指
    packagename.go
    ,但是你的帮助非常有用,我注意到我犯了一个愚蠢的错误。非常感谢。不,包foo不需要文件foo.go。文件栏以“package foo”开头很好(但奇怪)。”请不要使用“相对导入”。错误的做法,不是预期的方式,将来可能不起作用,软件包不再可以获取。golang邮件列表中有很多详细信息。或者在这里查看。