Skip to content

openapphub/golang-gin-mysql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go Gin MySQL Web API 项目

一个基于 Go 语言、Gin 框架和 MySQL 数据库的 Web API 项目,采用分层架构设计,适合 Go 语言初学者学习。

📋 项目简介

本项目是一个简单的用户和文章管理系统,提供了完整的 CRUD(增删改查)操作。项目采用经典的三层架构模式,代码结构清晰,注释详细,非常适合 Go 语言新手学习和参考。

主要功能

  • 👤 用户管理:创建、查询、更新、删除用户
  • 📝 文章管理:创建、查询、更新、删除文章
  • 🔗 关联查询:获取用户及其所有文章
  • 🔄 事务支持:用户创建时自动创建默认文章(演示事务操作)

🏗️ 项目结构

golang-gin-mysql/
├── cmd/
│   └── server/
│       └── main.go              # 应用程序入口点
├── internal/                    # 内部包(不对外暴露)
│   ├── config/
│   │   └── config.go           # 配置管理
│   ├── db/
│   │   └── db.go               # 数据库连接管理
│   ├── handler/                # HTTP 处理器层
│   │   ├── user_handler.go     # 用户相关 HTTP 处理
│   │   └── article_handler.go  # 文章相关 HTTP 处理
│   ├── model/                  # 数据模型层
│   │   ├── user.go             # 用户数据模型
│   │   └── article.go          # 文章数据模型
│   ├── repository/             # 数据访问层
│   │   ├── user_repository.go  # 用户数据访问
│   │   └── article_repository.go # 文章数据访问
│   └── service/                # 业务逻辑层
│       └── user_service.go     # 用户业务逻辑
├── config.yaml                 # 配置文件
├── go.mod                      # Go 模块文件
├── go.sum                      # Go 模块校验文件
└── README.md                   # 项目说明文档

🚀 快速开始

环境要求

  • Go 1.24.0 或更高版本
  • MySQL 5.7 或更高版本
  • Git

安装步骤

  1. 克隆项目

    git clone <repository-url>
    cd golang-gin-mysql
  2. 安装依赖

    go mod tidy
  3. 配置数据库

    创建 MySQL 数据库和表:

    CREATE DATABASE dev_learning;
    
    USE dev_learning;
    
    -- 创建用户表
    CREATE TABLE users (
        id BIGINT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL,
        email VARCHAR(100) NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );
    
    -- 创建文章表
    CREATE TABLE articles (
        id BIGINT AUTO_INCREMENT PRIMARY KEY,
        user_id BIGINT NOT NULL,
        title VARCHAR(200) NOT NULL,
        content TEXT NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    );
  4. 修改配置文件

    编辑 config.yaml 文件,修改数据库连接信息:

    server:
      port: ":8080"
    
    mysql:
      dsn: "root:your_password@tcp(127.0.0.1:3306)/dev_learning?parseTime=true&loc=Local"
  5. 运行项目

    go run cmd/server/main.go

    看到以下输出表示启动成功:

    [SERVER] listening on :8080
    

📚 API 接口文档

用户相关接口

方法 路径 描述 请求体
POST /users 创建用户(同时创建默认文章) {"username": "string", "email": "string"}
GET /users/:id 获取用户信息及其文章列表 -
PUT /users/:id 更新用户信息 {"username": "string", "email": "string"}
DELETE /users/:id 删除用户(暂未实现) -

文章相关接口

方法 路径 描述 请求体
POST /articles 创建文章 {"user_id": int64, "title": "string", "content": "string"}
GET /articles/:id 获取单篇文章 -
PUT /articles/:id 更新文章 {"title": "string", "content": "string"}
DELETE /articles/:id 删除文章 -
GET /articles/user/:uid 获取用户的所有文章 -

示例请求

创建用户:

curl -X POST http://localhost:8080/users \
  -H "Content-Type: application/json" \
  -d '{"username": "john_doe", "email": "john@example.com"}'

获取用户信息:

curl http://localhost:8080/users/1

创建文章:

curl -X POST http://localhost:8080/articles \
  -H "Content-Type: application/json" \
  -d '{"user_id": 1, "title": "我的第一篇文章", "content": "这是文章内容..."}'

🏛️ 架构设计

分层架构

本项目采用经典的三层架构模式:

  1. Handler 层(处理器层)

    • 处理 HTTP 请求和响应
    • 参数验证和错误处理
    • 调用 Service 层处理业务逻辑
  2. Service 层(业务逻辑层)

    • 处理复杂的业务逻辑
    • 协调多个 Repository 操作
    • 事务管理
  3. Repository 层(数据访问层)

    • 封装数据库操作
    • 提供数据访问接口
    • 隔离数据库实现细节

设计模式

  • 依赖注入:通过构造函数注入依赖
  • 接口隔离:每层只依赖必要的接口
  • 单一职责:每个结构体和方法职责单一

🔧 技术栈

  • Web 框架Gin - 高性能的 Go Web 框架
  • 数据库:MySQL - 关系型数据库
  • ORM:database/sql - Go 标准库数据库操作
  • 配置管理Viper - 配置管理库
  • 数据验证:Gin 内置验证器

📖 学习要点

Go 语言特性

  1. 包管理:使用 go mod 管理依赖
  2. 结构体和方法:面向对象编程
  3. 接口:多态和依赖注入
  4. 错误处理:Go 语言的错误处理机制
  5. 并发:Context 上下文管理

Web 开发概念

  1. RESTful API:REST 风格的 API 设计
  2. HTTP 状态码:正确的状态码使用
  3. JSON 序列化:数据交换格式
  4. 中间件:请求处理管道
  5. 数据库事务:数据一致性保证

🐛 常见问题

数据库连接失败

检查以下几点:

  1. MySQL 服务是否启动
  2. 数据库连接信息是否正确
  3. 数据库和表是否已创建
  4. 防火墙是否阻止连接

端口被占用

如果 8080 端口被占用,可以修改 config.yaml 中的端口配置:

server:
  port: ":8081"  # 修改为其他端口

🤝 贡献指南

欢迎提交 Issue 和 Pull Request 来改进这个项目!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

感谢以下开源项目:


Happy Coding! 🎉

About

基础 golang web 入门开发

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages