Files
go_blog/README.md
T
2026-06-23 10:45:37 +08:00

9.1 KiB
Raw Blame History

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 CSSCDN

快速开始

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