{"repo":"limitcool/starter","free":true,"listed":false,"github":"https://github.com/limitcool/starter","clone":"git clone https://github.com/limitcool/starter.git","description":"starter 是一个 Go + gin 框架的项目脚手架,提供开箱即用的工具、库和 gin 项目配置,帮助您快速启动 gin 驱动的 API 项目开发。","language":"Go","stars":26,"topics":["framework","gin","gin-gonic","go","mongodb","mysql","postgresql","redis","sqlite","sqlite3"],"license":"GPL-3.0","category":"databases-storage","readme_excerpt":"Starter English 中文 这是 Starter 框架，采用简化架构设计，适合快速开发和简单应用场景。专注于提供轻量级、高效的 Go Web 开发体验。 特征 - 提供基于 Gin 框架的轻量级项目模板 - 使用简洁的手动依赖注入，实现清晰的代码结构 - 采用简化的架构设计，专注于快速开发 - 集成 GORM 进行 ORM 映射和数据库操作 - 支持 PostgreSQL (使用 pgx 驱动) - 支持 MySQL - 支持 SQLite - 集成 Viper 进行配置管理 - 提供常用 Gin 中间件和工具 - 跨域中间件：处理 API 跨域请求，实现 CORS 支持 - JWT 解析中间件：从请求中解析并验证 JWT Token，用于 API 身份认证 - 国际化 (i18n) 支持 - 基于请求 Accept-Language 头自动选择语言 - 错误消息多语言支持 - 使用 Cobra 命令行框架，提供清晰的子命令结构 - 支持数据库迁移与服务器启动分离，提高启动速度 - 简化的用户管理系统，使用单一用户表和 IsAdmin 字段区分管理员 - 优化的错误处理系统，支持错误码和多语言错误消息 架构设计 项目采用简化的架构设计，使用手动依赖注入，实现了清晰的代码结构： 1. 简化的分层架构 - Model 层 ：定义数据模型和数据库表结构 - Handler 层 ：处理 HTTP 请求和响应，直接与数据库交互 - Router 层 ：定义 API 路由，依赖于 Handler 层 2. 依赖注入 项目使用简洁的手动依赖注入，通过构造函数注入依赖： 3. 应用容器管理 使用应用容器管理组件的生命周期，确保组件的正确初始化和清理： 快速开始 使用方法 应用使用Cobra命令行框架，提供了更清晰的子命令结构。 基本命令 服务器命令 服务器命令用于启动HTTP服务： 数据库迁移命令 数据库迁移命令用于初始化或更新数据库结构： 用户管理设计 框架采用简化的用户管理设计，专注于快速开发和简单应用场景： 单一用户表设计 - 只使用 user 一张表存储所有用户信息 - 通过 is admin 字段区分普通用户和管理员用户 - 简化的数据库结构，减少表之间的关联 - 使用简化的权限检查中间件，只检查用户是否为管理员 配置管理员用户 在配置文件中设置初始管理员用户： 系统会在首次启动时自动创建管理员用户。 数据库迁移系统 框架实现了一个简洁的数据库迁移系统，用于管理数据库表结构的创建和更新。 迁移系统特点 - 支持按版本号顺序执行迁移 - 跟踪已执行的迁移记录 - 支持事务性迁移，确保数据一致性 - 提供向上和向下迁移功能 - 支持批次回滚和完全重置 迁移文件结构 迁移定义在 internal/migration/migrations.go 文件中，遵循以下结构： 预定义迁移 框架已预定义了基础的迁移项： 1. 用户表 ( users ) 2. 文件表 ( files ) 添加新迁移 要添加新的迁移，在 internal/migration/migrations.go 文件中： 1. 创建新的注册函数或在已有函数中添加 2. 确保版本号遵循时间戳顺序 3. 使用 RegisterMigration 函数注册 迁移记录表 系统通过 migrations 表跟踪迁移的执行状态，包含以下字段： - id ：自增主键 - version ：迁移版本号（唯一索引） - name ：迁移名称 - created at ：执行时间 - batch ：批次号（用","default_branch":null,"files":null,"tree":[],"storefront":"/r/limitcool","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/limitcool/starter/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}