Skip to content

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/       # 配置文件

总结复盘二:最佳实践

  1. 错误处理:使用 errors.Wrap 包装错误
  2. 并发安全:注意 goroutine 管理和 channel 使用
  3. 内存管理:避免内存泄漏,合理使用 sync.Pool
  4. 接口设计:面向接口编程,便于测试
  5. 依赖注入:使用 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@latest
2. 作为保存时的自动格式化
bash
# 手动运行
goimports -w main.go

# 或使用 gofmt 模式
gofmt -w -s main.go
3. 配置为预提交钩子
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