Skip to content

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 项目的组织方式。