File contents 项目概述
创建一个符合Go最佳实践的Web服务项目,使用现代化的技术栈和清晰的项目结构。
技术栈要求
核心框架
Web框架 : github.com/gin-gonic/gin - 用于HTTP路由和中间件
ORM框架 : gorm.io/gorm - 用于数据库操作
依赖注入 : go.uber.org/fx - 管理应用生命周期和依赖
日志框架 : go.uber.org/zap - 结构化高性能日志
数据库支持
必须同时支持以下三种数据库,通过配置文件切换:
MySQL: gorm.io/driver/mysql
PostgreSQL: gorm.io/driver/postgres
SQLite3: gorm.io/driver/sqlite
项目结构要求
project-name/
├── cmd/
│ └── server/
│ └── main. go # 应用入口
├── internal/
│ ├── config/
│ │ └── config.go # 配置结构和加载
│ ├── handler/
│ │ └── handler.go # HTTP处理器
│ ├── service/
│ │ └── service.go # 业务逻辑层
│ ├── repository/
│ │ └── repository.go # 数据访问层
│ ├── model/
│ │ └── model.go # 数据模型
│ ├── middleware/
│ │ └── middleware.go # 中间件
│ └── database/
│ └── database.go # 数据库连接和初始化
├── pkg/
│ ├── logger/
│ │ └── logger.go # 日志工具封装
│ └── response/
│ └── response. go # 统一响应格式
├── configs/
│ ├── config.yaml # 配置文件
│ └── config.example.yaml # 配置文件示例
├── migrations/
│ └── . gitkeep # 数据库迁移文件
├── scripts/
│ └── setup. sh # 初始化脚本
├── . gitignore
├── go.mod
├── go.sum
├── Makefile # 构建和运行命令
└── README.md # 项目文档
代码实现约束
1. 依赖注入 (fx) 规范
所有组件(handler, service, repository)必须通过fx注入
使用fx. Provide注册所有依赖
使用fx.Invoke启动HTTP服务器
正确处理应用生命周期(OnStart, OnStop hooks)
2. 日志 (zap) 规范
使用结构化日志,不使用fmt.Println
开发环境使用Development配置,生产环境使用Production配置
日志级别可通过配置文件配置
记录所有关键操作(数据库连接、HTTP请求、错误等)
示例:logger.Info("message", zap.String("key", "value"))
3. 数据库 (GORM) 规范
使用GORM的AutoMigrate进行表结构管理
所有Model必须包含:ID, CreatedAt, UpdatedAt, DeletedAt(软删除)
使用接口定义Repository层,便于测试和切换实现
数据库连接池配置(MaxIdleConns, MaxOpenConns, ConnMaxLifetime)
必须实现数据库选择逻辑,根据配置文件的database. driver字段选择对应驱动
4. Web框架 (Gin) 规范
使用Gin的分组路由(RouterGroup)
实现统一的错误处理中间件
实现请求日志中间件(记录请求方法、路径、耗时、状态码)
实现跨域中间件(CORS)
实现恢复中间件(Recovery)防止panic崩溃
使用结构体进行请求参数绑定和验证
5. 配置管理规范
6. 代码风格约束
遵循Go官方代码规范(gofmt, golint)
所有导出的函数和类型必须有注释
错误处理:不忽略任何error,使用if err != nil立即处理
使用Go Modules管理依赖
包名使用单数形式(handler而非handlers)
7. 分层架构约束
HTTP请求 -> Handler -> Service -> Repository -> Database
↓ ↓ ↓
参数验证 业务逻辑 数据访问
Handler层 :仅处理HTTP相关逻辑(参数绑定、响应)
Service层 :实现所有业务逻辑,不包含HTTP相关代码
Repository层 :仅处理数据库CRUD操作
每层通过接口交互,便于单元测试
8. 错误处理规范
9. 必需的Makefile命令
. PHONY: run build test clean migrate
run: # 运行项目
build: # 编译二进制文件
test: # 运行测试
clean: # 清理构建文件
migrate: # 运行数据库迁移
lint: # 代码检查
10. README. md 必需内容
项目简介
技术栈列表
快速开始(环境要求、安装步骤、运行方法)
项目结构说明
配置说明
API文档或示例
数据库切换方法
示例需求
作为参考,项目应该实现以下基础功能:
健康检查接口:GET /health
RESTful CRUD示例(如用户管理):
POST /api/v1/users - 创建用户
GET /api/v1/users/: id - 获取用户
PUT /api/v1/users/:id - 更新用户
DELETE /api/v1/users/:id - 删除用户
GET /api/v1/users - 用户列表(支持分页)
质量要求
代码必须可以直接运行,无编译错误
所有数据库驱动都要测试可用
配置文件切换数据库后无需修改代码
包含完整的依赖版本(go.mod)
遵循12-Factor App原则
附加约束
不使用全局变量存储数据库连接或配置
所有依赖通过构造函数注入
时间使用UTC时区
敏感信息(如密码)不写入日志
数据库密码等敏感配置支持从环境变量读取
1 --- 2 name: golang 3 description: 项目概述 4 --- 5 6 ## 项目概述 7 创建一个符合Go最佳实践的Web服务项目,使用现代化的技术栈和清晰的项目结构。 8 9 ## 技术栈要求 10 11 ### 核心框架 12 - **Web框架**: `github.com/gin-gonic/gin` - 用于HTTP路由和中间件 13 - **ORM框架**: `gorm.io/gorm` - 用于数据库操作 14 - **依赖注入**: `go.uber.org/fx` - 管理应用生命周期和依赖 15 - **日志框架**: `go.uber.org/zap` - 结构化高性能日志 16 17 ### 数据库支持 18 必须同时支持以下三种数据库,通过配置文件切换: 19 - MySQL: `gorm.io/driver/mysql` 20 - PostgreSQL: `gorm.io/driver/postgres` 21 - SQLite3: `gorm.io/driver/sqlite` 22 23 ## 项目结构要求 24 25 ``` 26 project-name/ 27 ├── cmd/ 28 │ └── server/ 29 │ └── main. go # 应用入口 30 ├── internal/ 31 │ ├── config/ 32 │ │ └── config.go # 配置结构和加载 33 │ ├── handler/ 34 │ │ └── handler.go # HTTP处理器 35 │ ├── service/ 36 │ │ └── service.go # 业务逻辑层 37 │ ├── repository/ 38 │ │ └── repository.go # 数据访问层 39 │ ├── model/ 40 │ │ └── model.go # 数据模型 41 │ ├── middleware/ 42 │ │ └── middleware.go # 中间件 43 │ └── database/ 44 │ └── database.go # 数据库连接和初始化 45 ├── pkg/ 46 │ ├── logger/ 47 │ │ └── logger.go # 日志工具封装 48 │ └── response/ 49 │ └── response. go # 统一响应格式 50 ├── configs/ 51 │ ├── config.yaml # 配置文件 52 │ └── config.example.yaml # 配置文件示例 53 ├── migrations/ 54 │ └── . gitkeep # 数据库迁移文件 55 ├── scripts/ 56 │ └── setup. sh # 初始化脚本 57 ├── . gitignore 58 ├── go.mod 59 ├── go.sum 60 ├── Makefile # 构建和运行命令 61 └── README.md # 项目文档 62 ``` 63 64 ## 代码实现约束 65 66 ### 1. 依赖注入 (fx) 规范 67 - 所有组件(handler, service, repository)必须通过fx注入 68 - 使用fx. Provide注册所有依赖 69 - 使用fx.Invoke启动HTTP服务器 70 - 正确处理应用生命周期(OnStart, OnStop hooks) 71 72 ### 2. 日志 (zap) 规范 73 - 使用结构化日志,不使用fmt.Println 74 - 开发环境使用Development配置,生产环境使用Production配置 75 - 日志级别可通过配置文件配置 76 - 记录所有关键操作(数据库连接、HTTP请求、错误等) 77 - 示例:`logger.Info("message", zap.String("key", "value"))` 78 79 ### 3. 数据库 (GORM) 规范 80 - 使用GORM的AutoMigrate进行表结构管理 81 - 所有Model必须包含:`ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`(软删除) 82 - 使用接口定义Repository层,便于测试和切换实现 83 - 数据库连接池配置(MaxIdleConns, MaxOpenConns, ConnMaxLifetime) 84 - 必须实现数据库选择逻辑,根据配置文件的`database. driver`字段选择对应驱动 85 86 ### 4. Web框架 (Gin) 规范 87 - 使用Gin的分组路由(RouterGroup) 88 - 实现统一的错误处理中间件 89 - 实现请求日志中间件(记录请求方法、路径、耗时、状态码) 90 - 实现跨域中间件(CORS) 91 - 实现恢复中间件(Recovery)防止panic崩溃 92 - 使用结构体进行请求参数绑定和验证 93 94 ### 5. 配置管理规范 95 - 使用YAML格式配置文件 96 - 支持环境变量覆盖配置 97 - 配置项必须包含: 98 ```yaml 99 server: 100 port: 8080 101 mode: debug # debug/release 102 103 database: 104 driver: mysql # mysql/postgres/sqlite 105 host: localhost 106 port: 3306 107 username: root 108 password: password 109 database: dbname 110 # SQLite使用此字段 111 sqlite_path: ./data. db 112 113 logger: 114 level: info # debug/info/warn/error 115 encoding: json # json/console 116 ``` 117 118 ### 6. 代码风格约束 119 - 遵循Go官方代码规范(gofmt, golint) 120 - 所有导出的函数和类型必须有注释 121 - 错误处理:不忽略任何error,使用`if err != nil`立即处理 122 - 使用Go Modules管理依赖 123 - 包名使用单数形式(handler而非handlers) 124 125 ### 7. 分层架构约束 126 ``` 127 HTTP请求 -> Handler -> Service -> Repository -> Database 128 ↓ ↓ ↓ 129 参数验证 业务逻辑 数据访问 130 ``` 131 132 - **Handler层**:仅处理HTTP相关逻辑(参数绑定、响应) 133 - **Service层**:实现所有业务逻辑,不包含HTTP相关代码 134 - **Repository层**:仅处理数据库CRUD操作 135 - 每层通过接口交互,便于单元测试 136 137 ### 8. 错误处理规范 138 - 定义统一的错误码和错误消息 139 - 使用自定义错误类型包装业务错误 140 - HTTP响应格式统一: 141 ```json 142 { 143 "code": 0, 144 "message": "success", 145 "data": {} 146 } 147 ``` 148 149 ### 9. 必需的Makefile命令 150 ```makefile 151 . PHONY: run build test clean migrate 152 153 run: # 运行项目 154 build: # 编译二进制文件 155 test: # 运行测试 156 clean: # 清理构建文件 157 migrate: # 运行数据库迁移 158 lint: # 代码检查 159 ``` 160 161 ### 10. README. md 必需内容 162 - 项目简介 163 - 技术栈列表 164 - 快速开始(环境要求、安装步骤、运行方法) 165 - 项目结构说明 166 - 配置说明 167 - API文档或示例 168 - 数据库切换方法 169 170 ## 示例需求 171 作为参考,项目应该实现以下基础功能: 172 - 健康检查接口:`GET /health` 173 - RESTful CRUD示例(如用户管理): 174 - `POST /api/v1/users` - 创建用户 175 - `GET /api/v1/users/: id` - 获取用户 176 - `PUT /api/v1/users/:id` - 更新用户 177 - `DELETE /api/v1/users/:id` - 删除用户 178 - `GET /api/v1/users` - 用户列表(支持分页) 179 180 ## 质量要求 181 - 代码必须可以直接运行,无编译错误 182 - 所有数据库驱动都要测试可用 183 - 配置文件切换数据库后无需修改代码 184 - 包含完整的依赖版本(go.mod) 185 - 遵循12-Factor App原则 186 187 ## 附加约束 188 - 不使用全局变量存储数据库连接或配置 189 - 所有依赖通过构造函数注入 190 - 时间使用UTC时区 191 - 敏感信息(如密码)不写入日志 192 - 数据库密码等敏感配置支持从环境变量读取
difyz9/skills/tree/main/golang开发 commit 6b4832860a
Frequently asked questions How do I install the Golang开发 skill? Run npx skillmds@latest add difyz9/golang in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Golang开发 skill do? 项目概述 It is listed under Coding & Dev Tools on SkillMD.
Is Golang开发 safe to use? This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Golang开发? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Golang开发 free to use? Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
Who published Golang开发? difyz9 (@difyz9) published this skill. Their other Agent Skills are listed on their SkillMD profile.