Go语言包结构

标签 go

我正在尝试学习 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.go complex.go ?

  3. 然后,有没有可能有这样的东西:

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

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

最佳答案

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

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

您的问题:

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

  2. 所有文件 rational.gocomplex.goreal.go 通常都以 包号开头。这些都是包号的一部分,您包括文件但包括包。不需要导入当前包。所以:没有。

关于Go语言包结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21616276/

相关文章:

go - 如何在专用服务器上运行多个 Golang 应用程序?

variables - golang 变量替换

pointers - 为什么在将它传递给另一个函数时需要指向 Go bytes.Buffer 的指针?

go - 在 Go 中,有什么方法可以比较两个没有嵌套 switch 语句的混合类型接口(interface)?

json - 如何将 hit.Source 反序列化为 golang 中的结构

unit-testing - 如何模拟第三方包的方法

sockets - golang write net conn 不返回错误但是socket的另一端收不到数据

javascript - 无法将图像发送到 Go 服务器

go - 关闭已完成的 channel 后,goroutine中缺少打印内容

go - 如果它阻塞,如何将 http.Serve 放在它自己的 goroutine 中?