Golang - 1 - 项目目录结构
项目目录结构
├── cmd
│ ├── app1
│ │ └── main.go
│ └── app2
│ └── main.go
├── config
│ └── config.go
├── controllers
│ └── admin_handler.go
│ └── auth_handler.go
│ └── user_handler.go
│ └── oauth_handler.go
│ └── captcha.go
│ └── email.go
│ └── sms.go
│ └── [...].go
├── docs
│ └── [...].md
├── email
│ └── email.go
├── errors
│ └── error.go
├── middleware
│ └── admin_auth.go
│ └── error_handler.go
│ └── jwt.go
│ └── request_log.go
├── models
│ └── mongodb.go
│ └── oauth_repository.go
│ └── requestLog_repository.go
│ └── user_repository.go
│ └── userLoginLog_repository.go
├── scripts
│ └── tencent.go
├── sms
│ └── accountd.service
│ └── generate_jwt_rsa.sh
├── utils
│ └── utils.go
│ └── validator.go
├── README.md
└── go.mod
└── go.sum
└── main.go
目录说明
cmd
:存放应用程序的入口文件,每个子目录代表一个独立的可执行程序。- 使用 cobra 框架实现命令行功能
config
:配置文件管理。- config.go 处理配置文件的读取和解析。
controllers
:HTTP 请求处理层。- admin_handler.go : 管理员相关接口
- auth_handler.go : 认证相关接口
- user_handler.go : 用户相关接口
- oauth_handler.go : OAuth 认证接口
- captcha.go : 验证码处理
- email.go : 邮件相关接口
- sms.go : 短信相关接口
docs
:- API 文档
- Swagger 文档配置
- 其他技术文档
email
:- 邮件服务实现
- 处理邮件发送等功能
errors
:- 错误处理相关代码
- 自定义错误类型
middleware
:- HTTP 中间件
- 如认证、日志、跨域等处理
models
:- 数据模型定义
- 数据库操作封装
- Repository 模式实现
scripts
:- 部署脚本
- 系统服务配置文件
sms
:- 短信服务实现
- 处理短信发送等功能
utils
:- 通用工具函数
- 辅助功能实现
go.mod
:Go 模块文件,用于管理项目的依赖。go.sum
:这个文件通常不需要手动修改,它会随着 go.mod 文件的更新自动维护。- go.sum 和 Node.js 项目中的 yarn.lock 或 package-lock.json 非常类似,它们都是依赖版本锁定文件。
main.go
:Go 主入口文件。README.md
:项目的说明文档。
示例代码
cmd/app1/main.go
go
package main
import (
"fmt"
"github.com/your-username/your-project/pkg/lib1"
)
func main() {
fmt.Println("Hello from app1")
lib1.Lib1Function()
}
pkg/lib1/lib1.go
go
package lib1
import "fmt"
func Lib1Function() {
fmt.Println("This is lib1 function")
}
api/api1/api1.go
go
package api1
import "fmt"
func Api1Function() {
fmt.Println("This is api1 function")
}
web/web1/web1.go
go
package web1
import "fmt"
func Web1Function() {
fmt.Println("This is web1 function")
}
config/config.go
go
package config
import "fmt"
func ConfigFunction() {
fmt.Println("This is config function")
}
go.mod
go
module github.com/your-username/your-project
go 1.16
总结
以上是一个简单的 Go 项目结构示例,你可以根据自己的需求进行修改和扩展。希望这个示例能帮助你更好地理解 Go 项目的组织方式。