Go 项目结构和导入包

Go 项目结构和导入包,go,Go,我刚刚开始学习Go,我想知道如何最好地组织我的项目和导入包。我在$GOPATH/src/my_project创建了一个项目。它包含文件main.go和包含文件bar.go的文件夹foo $GOPATH/src/my_项目 梅因,加油 福/ 酒吧 我的main.go如下所示 package main import ( "./foo" "fmt" ) func main() { fmt.Println("M

我刚刚开始学习Go,我想知道如何最好地组织我的项目和导入包。我在
$GOPATH/src/my_project
创建了一个项目。它包含文件
main.go
和包含文件
bar.go
的文件夹
foo

  • $GOPATH/src/my_项目
    • 梅因,加油
    • 福/
      • 酒吧
我的main.go如下所示

package main

import (
    "./foo"
    "fmt"
)

func main() {
    fmt.Println("Main")
    foo.Baz()
}
这是食物

package foo

import "fmt"

func Baz() {
    fmt.Println("Baz")
}
它以我期望的方式工作,但我想知道这是否真的是构建项目和导入包的正确方式,因为大多数教程只从github导入包,而从不从本地导入包


感谢您的回答。

Go中可以使用相对导入,但不鼓励使用

相反,您总是使用包的完整路径。在您的情况下,这将是
my\u project/foo
。这是相对于
GOPATH/src
文件夹的

然而,由于我们现在有了
Go模块
,这使得事情开始时有点复杂,但从长远来看有很多优势

就在今天早些时候,我就如何使用Go模块建立一个新项目给出了一个分步指南:

本指南中的模块名称是项目的基础,模块中的所有路径都基于该路径构建。让我举一个例子:

假设您将模块命名为
github.com/yourName/myProject
。然后可以使用github.com/yourName/myProject/foo导入子包
foo


注意:模块路径应该与git URL相同,这样您就可以使用
go-get
获取模块。如果您不打算将项目上传到github或其他git URL,您仍然应该选择一个唯一的名称。从您拥有的域开始是一个好主意——为了唯一性。

这里没有错。您可以使用搜索栏阅读更多问题及其答案忽略随机教程,阅读“如何编写Go代码”,放弃GOPATH构建并使用模块。