fe69a2e38bdbf59c54baf81239a1c8d19107579f
Go Blog
一个简洁、快速的博客引擎,使用 Go + Gin + Tailwind CSS 构建。支持 SQLite 和 MySQL,首次运行自动完成配置。
功能特性
- 文章管理 — 文章的创建、编辑、删除,支持标签分类、自定义发布时间和更新时间
- 评论系统 — 文章评论功能,后台可审核(通过/拒绝/删除),支持评论设置
- 用户系统 — 用户注册、登录,角色分为管理员(admin)和作者(author)
- 角色权限 — 管理员可访问后台管理面板;作者可管理自己的文章
- 个人中心 — 上传头像(支持裁剪)、编辑个人信息、修改密码
- 站点设置 — 自定义站点标题、副标题、favicon 图标
- 导航管理 — 自定义首页导航链接,支持图标
- 瀑布流布局 — 首页文章以瀑布流展示,支持无限滚动加载
- 阅读统计 — 文章阅读量统计,带机器人流量检测
- 附件上传 — 文章支持上传附件,基于内容寻址自动去重
- RSS 订阅 — 自动生成 RSS Feed(
/rss、/feed) - 搜索功能 — 文章全文搜索
- 多语言 — 支持中文 / English,自动检测浏览器语言或手动切换
- 自适应界面 — Tailwind CSS,桌面端和移动端均可正常使用
- 开箱即用 — 首次运行自动创建配置文件、数据库和管理员账号
技术栈
| 层级 | 库/工具 |
|---|---|
| 路由 | gin |
| ORM | gorm |
| SQLite | glebarez/sqlite(纯 Go,无需 CGO) |
| Session | gin-contrib/sessions |
| 配置 | gopkg.in/yaml.v3 |
| 密码 | golang.org/x/crypto |
| CSS | Tailwind CSS(CDN) |
快速开始
go run .
打开 http://localhost:8080 ,使用 admin / admin 登录。
配置
首次运行时,配置文件会自动生成:
| 平台 | 配置文件路径 | 数据存储路径 |
|---|---|---|
| Linux | /etc/blog_go/config.yaml |
/srv/blog_go/ |
| Windows | ./win/etc/blog_go/config.yaml |
./win/srv/blog_go/ |
# config.yaml
database:
type: sqlite # sqlite(默认)或 mysql
dsn: "" # MySQL 连接串,sqlite 模式下忽略
port: "8080" # Web 服务端口
path: ./win/srv/blog_go # 数据存储路径(数据库、上传文件)
secret: <自动生成> # Session 加密密钥
使用 MySQL
编辑 config.yaml:
database:
type: mysql
dsn: user:password@tcp(127.0.0.1:3306)/blog_go?charset=utf8mb4&parseTime=True&loc=Local
port: "8080"
先创建数据库:
CREATE DATABASE blog_go CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
项目结构
go_blog/
├── main.go # 入口,路由注册,中间件装配
├── config/
│ └── config.go # 配置加载 / 自动创建(区分操作系统)
├── models/
│ ├── user.go # 用户模型 + bcrypt
│ ├── article.go # 文章模型
│ ├── article_tag.go # 文章-标签关联
│ ├── article_view.go # 文章阅读统计
│ ├── attachment.go # 附件模型
│ ├── bot_detector.go # 机器人流量检测
│ ├── comment.go # 评论模型
│ ├── comment_config.go # 评论配置
│ ├── config_cache.go # 平台配置缓存
│ ├── db.go # GORM 初始化、自动迁移
│ ├── nav_link.go # 导航链接模型
│ ├── seed.go # 初始数据填充
│ ├── site_setting.go # 站点设置模型
│ ├── tag.go # 标签模型
│ └── upload_config.go # 上传配置
├── middleware/
│ └── auth.go # 登录验证、角色鉴权、语言检测
├── handlers/
│ ├── helpers.go # 公共工具函数
│ ├── home.go # 首页
│ ├── article.go # 文章详情、文章列表 API
│ ├── auth.go # 登录
│ ├── admin.go # 管理后台首页
│ ├── admin_comment.go # 评论管理
│ ├── admin_user.go # 用户管理
│ ├── admin_analytics.go # 阅读统计
│ ├── attachment.go # 附件上传/删除
│ ├── comment.go # 评论提交
│ ├── my_articles.go # 用户文章管理
│ ├── profile.go # 个人中心
│ ├── rss.go # RSS Feed
│ ├── settings.go # 站点/导航/上传/评论设置
│ └── upload_validator.go # 上传文件校验
├── i18n/
│ └── i18n.go # 中英文翻译映射 + Accept-Language 检测
├── templates/
│ ├── layouts/base.html # 公共布局(导航栏 + 头像下拉菜单 + 页脚)
│ ├── pages/
│ │ ├── home.html # 首页(瀑布流 + 无限滚动)
│ │ ├── article.html # 文章详情页
│ │ ├── login.html # 登录页
│ │ ├── register.html # 注册页
│ │ ├── profile.html # 个人中心
│ │ ├── search.html # 搜索页
│ │ └── 404.html # 404 页面
│ ├── admin/
│ │ ├── dashboard.html # 管理后台首页
│ │ ├── article_list.html # 文章列表
│ │ ├── article_create.html# 文章编辑
│ │ ├── comment_list.html # 评论审核
│ │ ├── user_list.html # 用户列表
│ │ ├── user_form.html # 用户表单
│ │ ├── analytics_views.html # 阅读统计
│ │ ├── settings_site.html # 站点设置
│ │ ├── settings_navlinks.html # 导航链接设置
│ │ ├── settings_upload.html # 上传设置
│ │ ├── settings_download.html # 下载设置
│ │ └── settings_comment.html # 评论设置
│ └── user/
│ ├── my_articles.html # 我的文章列表
│ └── my_article_form.html # 我的文章编辑
└── win/ # 运行时数据目录(Windows,自动创建)
├── etc/blog_go/
│ └── config.yaml
└── srv/blog_go/
├── blog.db
└── avatars/
路由
公开路由
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
首页 |
| GET | /search |
搜索页 |
| GET | /api/articles |
文章列表 API(无限滚动) |
| GET | /rss、/feed |
RSS 订阅 |
| GET | /article/:slug |
文章详情 |
| POST | /article/:slug/comments |
发表评论 |
| GET | /login |
登录页 |
| POST | /login |
提交登录 |
| GET | /register |
注册页 |
| POST | /register |
提交注册 |
| POST | /logout |
退出登录 |
| GET | /uploads/* |
静态文件(头像、附件等) |
管理后台(需管理员权限)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /admin |
管理后台首页 |
| GET | /admin/articles |
文章列表 |
| GET/POST | /admin/articles/new |
新建文章 |
| GET/POST | /admin/articles/:id/edit |
编辑文章 |
| POST | /admin/articles/:id/delete |
删除文章 |
| POST | /admin/articles/attachments |
上传附件 |
| POST | /admin/articles/attachments/:id/delete |
删除附件 |
| GET | /admin/articles/:id/attachments |
附件列表 |
| GET | /admin/comments |
评论管理 |
| POST | /admin/comments/:id/approve |
通过评论 |
| POST | /admin/comments/:id/reject |
拒绝评论 |
| POST | /admin/comments/:id/delete |
删除评论 |
| GET | /admin/users |
用户列表 |
| GET/POST | /admin/users/new |
新建用户 |
| GET/POST | /admin/users/:id/edit |
编辑用户 |
| POST | /admin/users/:id/delete |
删除用户 |
| GET | /admin/analytics/views |
阅读统计 |
| GET/POST | /admin/settings/site |
站点设置 |
| GET/POST | /admin/settings/navlinks |
导航链接设置 |
| GET/POST | /admin/settings/upload |
上传设置 |
| GET/POST | /admin/settings/download |
下载设置 |
| GET/POST | /admin/settings/comments |
评论设置 |
个人中心(需登录)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET/POST | /profile |
编辑个人信息 |
| POST | /profile/avatar |
上传头像 |
| GET | /my/articles |
我的文章列表 |
| GET/POST | /my/articles/new |
新建文章 |
| GET/POST | /my/articles/:id/edit |
编辑文章 |
| POST | /my/articles/:id/delete |
删除文章 |
| POST | /my/articles/attachments |
上传附件 |
| POST | /my/articles/attachments/:id/delete |
删除附件 |
| GET | /my/articles/:id/attachments |
附件列表 |
用户角色
| 角色 | 个人中心 | 我的文章 | 管理后台 |
|---|---|---|---|
admin |
✓ | ✓ | ✓ |
author |
✓ | ✓ | ✗ |
许可证
MIT
Languages
Go
53.3%
HTML
45.9%
Shell
0.8%