Golang项目目录结构最佳实践
Golang项目目录结构最佳实践 我正在创建一个文件目录;主文件夹中有一个 main.go 文件,但当我运行此文件时,main.go 会给出以下错误:
无法导入 mod1/title(没有所需的模块提供包“mod1/title”)
mainfolder/
├── go.mod
├── go.sum
└── main.go
title/
└── ■■■.go
go.mod:
module mod1
go 1.19
package mainfolder
import (
"mod1/title"
)
func main() {
title.TitFunc()
}
更多关于Golang项目目录结构最佳实践的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我不能像创建它们那样直接创建文件夹吗?
我想把 main.go、mod.go 和 sum.go 也放在一个文件夹里。
不要与工具对抗。你还需要将 main.go 中的包名改为 main。
通常来说,每个仓库/项目会有一个 Go 模块。你可以按照你现有的方式组织代码,但这意味着两个模块,而这几乎肯定不是你想要的结果。你可能想要的是类似这样的结构:
project/
├── go.mod
├── go.sum
├── main.go
├── /mainfolder/
└── /title/
如果出于合理原因需要将它们分开,你当然可以创建一个引用你维护的另一个模块的模块。如果你必须在一个项目/仓库中包含多个模块(正如我提到的,这可能不是你想要的),你也可以创建一个工作区:

熟悉工作区 - Go 编程语言
了解 Go 工作区及其支持的一些工作流程。
另外,如果你还没看过,可以看看这个:

如何编写 Go 代码 - Go 编程语言
它包含了许多关于代码组织的实用且地道的建议。
根据你的项目结构,问题在于 go.mod 中声明的模块名与导入路径不匹配。你的 go.mod 文件定义了模块名为 mod1,但项目目录名为 mainfolder,这导致了导入路径不一致。
以下是修正后的目录结构和代码示例:
目录结构:
mainfolder/
├── go.mod
├── go.sum
├── main.go
└── title/
└── title.go
go.mod 文件:
module mainfolder
go 1.19
main.go 文件:
package main
import (
"mainfolder/title"
)
func main() {
title.TitFunc()
}
title/title.go 文件:
package title
import "fmt"
func TitFunc() {
fmt.Println("Title function called")
}
关键修改:
- 将
go.mod中的模块名改为mainfolder,与项目目录名保持一致 - 在
main.go中使用正确的导入路径"mainfolder/title" - 确保
title包中的函数首字母大写以导出
运行命令:
cd mainfolder
go run main.go
这样应该能正确导入并使用 title 包中的函数。

