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

6 回复

将标题移动到主文件夹下

更多关于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")
}

关键修改:

  1. go.mod 中的模块名改为 mainfolder,与项目目录名保持一致
  2. main.go 中使用正确的导入路径 "mainfolder/title"
  3. 确保 title 包中的函数首字母大写以导出

运行命令:

cd mainfolder
go run main.go

这样应该能正确导入并使用 title 包中的函数。

回到顶部