# turing-backend-wjh **Repository Path**: Nomini/turing-backend-wjh ## Basic Information - **Project Name**: turing-backend-wjh - **Description**: 图灵科竟社官网后端项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2025-10-01 - **Last Updated**: 2025-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go Web 项目模板(Docker + MySQL + Redis) 一个开箱即用的 Go 后端项目模板,集成 Docker 容器化部署、MySQL 数据库、Redis 缓存,适合快速搭建 RESTful API 服务。 > 🎯 **目标**:新人克隆即用,一键启动,环境统一,开发高效。 --- ## 🚀 快速启动 1. 安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/) setting下的Docker Engine:{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "dns": [ "8.8.8.8", "8.8.4.4" ], "experimental": false, "features": { "buildkit": true }, "registry-mirrors": [ "https://registry-1.docker.io", "https://docker.1ms.run", "https://docker-0.unsee.tech", "https://docker.m.daocloud.io" ] } 2. 克隆配置项目 ```bash git clone https://gitee.com/Nomini/turing-backend.git cd turing-backend 统一密码和数据库名称! # MySQL 配置 MYSQL_ROOT_PASSWORD=tuling123 MYSQL_DATABASE=tuling 本地数据库连接:localhost的3307端口,账号密码测试连接后,就可以看到自动迁移过去的users表,注意区分要存储到数据库的才使用gorm管理 # Redis 配置 REDIS_PASSWORD=tuling123 本地redis的redis_insight连接URL:redis://default:tuling123@127.0.0.1:6380 3. 启动服务(含热重载) docker-compose up --build后,确保vscode有containers插件,然后进入选择turing-backend-app-1右键attch vscode开个新窗口,然后在新窗口开发(容器内部里开发),会自动同步到本地这个,然后支持不断热重载 ✅ 服务启动后访问:http://localhost:8081 💡 代码修改后,air 会自动重启,无需重新 docker-compose up。 docker-compose ps 查看是否构建了app,redis,mysql容器 # 想执行终端命令: 再开一个新的终端,运行docker ps查看名字为turing-backend-app-1 然后进入容器 (base) PS D:\Project\turing-backend> docker exec -it turing-backend-app-1 /bin/sh 就可以执行go命令 ![alt text](image-1.png) ### 2. 项目结构说明 turing-backend/ ├── main.go # 程序入口,启动 Gin 服务 ├── config/ # 配置管理 │ └── config.go # 加载 .env 和 config.yaml ├── common/ # 公共工具 │ ├── db.go # GORM 数据库初始化 │ └── redis.go # Redis 客户端初始化 ├── model/ # 数据模型(GORM Struct) │ └── user.go # 示例:用户表结构 ├── handler/ # 控制器(HTTP 接口逻辑) │ └── user_handler.go # 示例:处理 /login 请求 ├── service/ # 业务逻辑层(处理复杂逻辑) │ └── user_service.go # 示例:登录密码校验、Token 生成 ├── route/ # 路由注册 │ └── router.go # 定义 /api/v1/login 等路由 ├── middleware/ # 中间件(跨域、日志、认证等) │ ├── cors.go │ ├── logger.go |—— response/ | |—— response # 响应统一格式 ├── .gitignore # git commit忽略文件 |—— constant/ # 常量错误码等封装 | |—— code.go # 封装的返回编码 |—— util/ # 工具类,字符串等校验 | |—— validate.go ├── Dockerfile # Go 镜像构建 ├── docker-compose.yml # 定义 app + mysql + redis 服务 ├── air.toml # air 热重载配置 └── README.md └── .env ## 如何添加新接口?(以登录为例) ### 1. 定义模型(model/user.go) type User struct { ID uint `gorm:"primaryKey"` Username string `gorm:"unique;not null"` Password string `gorm:"not null"` } ### 2. 创建服务层:与数据库交互 func Login(username, password string) (string, error) { // 查询用户、校验密码、生成 Token } ### 3. 创建控制器:与前端交互 func Login(c *gin.Context) { var req LoginRequest } ### 4. 注册路由(route/router.go):与url交互给控制器 v1.POST("/login", handler.Login) ✅ 完成!访问 /api/v1/atth/login 即可。 ## 如何添加数据库表? 1、在 model/ 目录下定义你的结构体 2、在 common/db.go 的 InitDB() 中调用: DB.AutoMigrate(&model.User{}, &model.Product{}, ...) docker-compose up --build ✅ GORM 会自动创建或更新表结构,无需手动建表。这里有gorm语法 🌐 前后端交互规范 从前端请求 → 路由 → 控制器 → 服务 → 模型 → 数据库 → 返回 1. 统一响应格式 { "code": 0, "msg": "success", "data": { ... } } Success code = 0 表示成功 Fail code ≠ 0 表示失败,详情请看constant/error.md,msg 为错误信息,可以SetMsg()动态设置 2. 跨域支持 前端地址:http://localhost:3000 后端自动允许跨域请求(通过 middleware/cors.go) 支持携带 Authorization 头 前端页面: http://localhost:8080 ← Vue 开发服务器 ↓ 前端代码发请求: /api/login ↓ Vue 代理拦截 → 转发到 http://localhost:8081/api/login ↓ Docker 映射:8081 → 容器内:8081 ↓ Go 程序处理请求 ✅ 操作 是否需要 --build 修改 .go 文件 ❌ 不需要(air 自动热重载) 修改 config.yaml ❌ 不需要(挂载卷实时同步) 修改 Dockerfile ✅ 需要 修改 go.mod / go.sum ✅ 需要 添加新依赖 ✅ 需要 删除旧依赖 ✅ 需要