Golang 项目详解
一、安装运行环境
二、项目实战分析
1. 目录结构
├── note_go
├── admin (管理后台接口)
│ ├── controllers (控制器层)
│ ├── models (模型层)
│ ├── services (服务层)
│ └── router (路由)
├── api (APP接口)
├── config (配置包)
├── docs (swagger文档目录)
├── assets (静态资源)
├── attachments (附件)
├── cert (证书)
├── pkg (包)
│ ├── cdylog (日志封装)
│ ├── constant (全局常量)
│ ├── cronManager (定时任务)
│ ├── generateFile (生成文件)
│ ├── utils (工具包)
│ ├── timer (定时器接口封装)
│ └── upload (oss接口封装)
│── runtime (运行时)
└── scripts (脚本)2. 项目架构设计
架构流程:
用户请求 → 路由层 → 中间件(认证/限流) → 控制器 → 服务层 → 数据层 → 数据库3. 技术栈与运行机制
核心技术栈
- 框架:Gin (轻量级 Web 框架)
- 数据库:MySQL + GORM (ORM 框架)
- 缓存:Redis
- 日志:Logrus + Zap
- 文档:Swagger
- 容器化:Docker
- 任务调度:Cron
- 消息服务:腾讯云短信、邮件服务
运行机制
bash
# 开发环境运行
go run main.go
# 生产环境
docker run -p 8001:80 -v 挂载目录 镜像名三、总结 / 复盘
总结复盘一:Golang 项目开发注意事项
代码组织
go
// 遵循标准目录结构
project/
├── cmd/ # 可执行文件入口
├── internal/ # 私有代码包
├── pkg/ # 公共代码包
├── api/ # API定义
└── config/ # 配置文件总结复盘二:最佳实践
- 错误处理:使用 errors.Wrap 包装错误
- 并发安全:注意 goroutine 管理和 channel 使用
- 内存管理:避免内存泄漏,合理使用 sync.Pool
- 接口设计:面向接口编程,便于测试
- 依赖注入:使用 wire 等工具管理依赖
总结复盘三:把 import 里面的内容做成自动引入
一、使用 IDE 的自动导入功能
1. Visual Studio Code(推荐)
json
// .vscode/settings.json
{
"go.useLanguageServer": true,
"go.autocompleteUnimportedPackages": true,
"go.importShortcut": "Both", // Both/Definition/Browse
"go.formatTool": "goimports",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"[go]": {
"editor.suggest.snippetsPreventQuickSuggestions": false,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}快捷键:
Ctrl+Shift+P→ "Go: Add Import" → 搜索包Ctrl+Shift+I→ 格式化并整理导入(使用 goimports)Ctrl+.→ 快速修复(自动添加缺失的导入)
2. Goland(JetBrains)
- 自动检测未导入的包
- 按
Alt+Enter快速导入 - 支持自动删除未使用的导入
二、使用 goimports 工具
1. 安装 goimports
bash
go install golang.org/x/tools/cmd/goimports@latest2. 作为保存时的自动格式化
bash
# 手动运行
goimports -w main.go
# 或使用 gofmt 模式
gofmt -w -s main.go3. 配置为预提交钩子
bash
# .git/hooks/pre-commit
#!/bin/sh
# 自动格式化并整理导入
for file in $(git diff --cached --name-only --diff-filter=ACM | grep '\.go$')
do
goimports -w "$file"
gofmt -s -w "$file"
git add "$file"
done