GoBlog是一个基于 Go 语言开发的仿知乎问答文章社区平台后端系统。该平台支持用户注册、登录、发布文章、评论互动、点赞收藏等核心社交功能,为用户提供一个高质量的内容创作和交流社区。
- 后端框架:Gin Web Framework
- ORM框架:GORM
- 数据库:MySQL
- 缓存:Redis
- 认证:JWT (JSON Web Token)
- API文档:Swagger
- 日志:Logrus
- 配置管理:YAML
- 云存储:七牛云(可选)
- 邮件服务:支持SMTP邮件发送
项目采用清晰的分层架构设计,各模块职责明确,便于维护和扩展:
├── api/ # API接口层,处理HTTP请求
├── config/ # 配置相关结构体定义
├── core/ # 核心初始化逻辑
├── global/ # 全局变量定义
├── middleware/ # 中间件
├── models/ # 数据模型定义
├── routers/ # 路由注册
├── service/ # 业务逻辑层
├── plugins/ # 插件(邮件、云存储等)
├── utils/ # 工具函数
└── main.go # 应用入口
- 用户注册、登录(支持邮箱登录)
- 用户信息管理(昵称、头像、个人资料等)
- 用户角色权限控制(普通用户、管理员等)
- JWT认证与授权
- 文章发布、编辑、删除
- 文章分类与标签管理
- 文章浏览量、点赞数统计
- 文章搜索与分页查询
- 文章评论发布、回复
- 评论点赞功能
- 多级评论支持
- 文章收藏与取消收藏
- 用户收藏列表管理
- 菜单管理
- 广告管理
- 标签管理
- 网站信息配置
- 邮箱服务配置
- 第三方服务集成(如七牛云存储)
项目使用 settings.yaml 文件进行配置管理,主要配置项包括:
mysql:
host: localhost
port: 3306
config: charset=utf8mb4&parseTime=True&loc=Local
db: goblog
user: root
password: your_password
log_level: infojwt:
key: your_secret_key
exp: 7200 # 过期时间(秒)email:
host: smtp.example.com
port: 465
user: your_email@example.com
password: your_email_password
defaultFromEmail: GoBlog
use_ssl: true
use_tls: truesite_Info:
title: GoBlog-AI
name: GoBlog问答社区
slogan: 分享知识,连接思想
version: 1.0.0
email: contact@example.com- Go 1.24+ 环境
- MySQL 5.7+ 数据库
- Redis 服务器(可选)
- 克隆项目代码
[git clone https://github.com/yourusername/GoBlog-AI.git](https://github.com/Clyanser/BlogCommunity.git)
cd GoBlog- 安装依赖
go mod download-
创建配置文件
settings.yaml,根据实际情况修改配置 -
初始化数据库
go run main.go -db- 创建管理员用户
go run main.go -u admin- 启动服务
go run main.go服务默认会在 http://127.0.0.1:9090 启动
项目集成了Swagger自动生成API文档,启动服务后可通过以下地址访问:
http://127.0.0.1:9090/swagger/index.html
包含所有HTTP接口定义,按功能模块划分为不同的子包,如用户API、文章API、评论API等。每个API模块负责处理对应的HTTP请求,并调用Service层进行业务逻辑处理。
定义了系统中所有的数据模型,与数据库表结构一一对应。包括用户模型、文章模型、评论模型等,同时定义了请求和响应结构体。
实现了系统的核心业务逻辑,为API层提供服务支持。包括用户服务、日志服务、图片上传服务等。
负责注册和管理系统的所有路由,将HTTP请求映射到对应的API处理函数。
实现了系统级别的中间件,如JWT认证、日志记录等,用于拦截和处理所有HTTP请求。
提供了各种通用的工具函数,如密码加密、JWT生成、IP解析等,供系统其他模块使用。
- 遵循Go语言标准编码规范
- 函数和变量命名清晰明了,避免使用过于简化的名称
- 关键代码添加必要的注释
- 在
models/中定义相关数据模型 - 在
service/中实现业务逻辑 - 在
api/中定义API接口 - 在
routers/中注册路由
项目使用GORM的AutoMigrate功能自动创建和更新数据库表结构。启动时通过 -db 参数触发数据库初始化。
- 敏感配置信息(如数据库密码、JWT密钥)应妥善保管,避免泄露
- 生产环境中建议关闭DEBUG模式
- 用户密码采用加密存储,禁止明文保存
- 定期备份数据库,防止数据丢失
- 直接使用
go run main.go启动服务 - 配置文件设置
env: dev,开启详细日志
- 编译为二进制文件:
go build -o GoBlog main.go - 使用Systemd或Supervisor管理服务进程
- 配置文件设置
env: prod,减少日志输出 - 建议使用Nginx作为反向代理