net/http 足够支撑初期博客 CRUD,应避免在 handler 中写业务逻辑、操作文件或数据库,而用显式 ServeMux、JSON 文件存储、blackfriday/v2 安全渲染、validator 统一校验,并保持数据模型与 HTTP 层解耦。
net/http 搭建基础路由,别急着上框架Go 自带的 net/http 足够支撑初期博客的 CRUD,加框架反而增加理解成本和部署复杂度。重点是把请求路径、方法、数据绑定逻辑理清楚。
常见错误:直接在 http.HandleFunc 里写业务逻辑,导致函数臃肿、无法测试、难以复用。
r.URL.Query() 或 json.NewDecoder(r.Body))、调用 service 层函数、写响应(json.NewEncoder(w).Encode())http.ServeMux 显式注册路由,比默认 http.DefaultServeMux 更可控,也方便后续加中间件(如日志、认证)早期博客内容少、并发低、无事务需求,用 os.WriteFile 写入结构化 JSON 到 ./data/posts/ 目录,比 SQLite 或 PostgreSQL 启动快、备份简单、调试直观。
容易踩的坑:多个请求同时写同一个文件导致数据丢失。
uuid.NewString()),文件名即 ID,避免中文或空格命名os.ReadFile + json.Unmarshal;写入前先 os.MkdirAll("./data/posts", 0755)
os.OpenFile(..., os.O_APPEND) 追加——JSON 不支持追加,必须整文件重写tmp := path.Join(dir, id+".tmp")),再 os.Rename
blackfriday/v2,但注意 XSS 风险blackfriday/v2 是目前最稳定的 Go Markdown 解析器,支持自定义 renderer,适合博客正文渲染。
关键问题:用户提交的 Markdown 可能含恶意 HTML(如 ),直接渲染会引发 XSS。
html.WithUnsafe(false)(默认就是 false,但显式写出更稳妥)),应配合 bluemonday 做白名单过滤,而不是关掉 WithUnsafe
html.Renderer,不要依赖默认输出blackfriday.Run([]byte(md)) —— 它已弃用,改用 markdown.ToHTML(v2 API)validator 库手动检查 title != ""、len(content) > 10 很容易漏,且分散在各 handler 中。统一用 go-playground/validator 结合 struct tag 约束。
典型场景:新建文章时前端传了空 title 或超长 slug。
validate:"required,min=1,max=100" 等 tag,字段名保持小写(Title string `json:"title" validate:"required"`)err.(validator.ValidationErrors) 提取具体字段和规则,返回 JSON 错误(如 {"field":"title","error":"required"})strings.ToLower(strings.ReplaceAll(title, " ", "-")) 简单处理Metadata 字段需加 validate:"dive"
type Post struct {
ID string `json:"id"`
Title string `json:"title" validate:"required,min=1,max=100"`
Slug string `json:"slug" validate:"required,alphanumdash"`
Content string `json:"content" validate:"required,min=10"`
CreatedAt time.Time `json:"created_at"`
}
func (p *Post) Validate() error {
return validator.New().Struct(p)
}
真正难的不是写完发布功能,而是当某天想加分类、标签、草稿箱时,发现当初没把数据模型和 HTTP
层解耦——那时再重构,比从头写还费劲。
# html
# js
# 前端
# markdown
# json
# go
# golang
# app
# 路由
# 博客系统
# 数据丢失
# red
# 中间件
# xss
# String
# 封装
# 表单验证
# Error
# 结构体
# Struct
# len
# 并发
# sqlite
# postgresql
# 数据库
# http
# 重构
# 博客
# 自定义
# 时用
# 装进
# 若需
# 多个
# 如有
# 很容易
# 要用
# 重写
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
如何优化Golang内存分配与GC调度_Golang垃圾回收优化示例
Win11怎么设置任务栏图标大小_Windows11注册表TaskbarSi修改
Win11声音太小怎么办_Windows 11开启响度均衡增强音量【技巧】
c++怎么使用std::tuple存储多元组数据_c++ 11获取元素与解包操作【技巧】
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
C++中引用和指针有什么区别?(代码说明)
Win11怎么打开旧版计算器_Win11恢复传统计算器应用【详解】
Windows蓝屏错误0x00000023怎么修复_FAT文件系统错误处理
如何自定义Windows终端的默认配置文件?(PowerShell/CMD)
Windows10如何删除Windows.old_Win10磁盘清理系统文件选项
Django密码修改后会话失效的解决方案
Win11怎么检查TPM2.0模块_Windows11受信任平台模块开启状态查询
如何使用Golang benchmark测量函数延迟_统计执行耗时
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
php修改数据怎么改富文本_update更新html内容注意事项【说明】
Win11怎么查看硬盘型号_Windows 11检测硬盘信息方法【技巧】
Win11快速助手怎么用_Win11远程协助连接教程【工具】
Win11文件夹预览图不显示怎么办_Win11缩略图缓存重建修复【教程】
c++怎么使用std::unique实现去重_c++ 容器元素排序与连续重复删除【教程】
php转mp4怎么保留字幕_php处理带字幕视频转换说明【说明】
PythonWeb前后端整合项目教程_FastAPIReact完整实例
php订单日志怎么在swoole写_php协程swoole写订单日志教程【教程】
Go语言中slice追加操作的底层共享机制详解
Win11如何设置电源计划_Win11电源计划优化教程【攻略】
VSC怎样在Linux运行PHP_Ubuntu系统配置步骤【操作】
Windows7如何安装系统镜像_Windows7系统安装教程【步骤】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Windows10电脑怎么设置文件权限_Win10安全选项卡所有者修改
如何使用Golang安装API文档生成工具_快速生成接口文档
Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选
Win11怎么连接蓝牙耳机_Win11蓝牙设备配对与连接教程【步骤】
Win10怎么更改用户名 Win10修改账户名称操作教程
php订单日志怎么按金额排序_php按订单金额排序日志方法【方法】
Win11如何设置文件权限 Win11 NTFS文件夹所有权与安全设置【高级】
Windows任务计划服务异常原因_任务调度失败的处理方案
PHP主流架构如何处理会话管理_Session与Cookie【技巧】
Win11怎么设置快速访问_Windows11文件资源管理器主页
mac怎么看硬盘大小_MAC查看磁盘存储空间与文件占用【详解】
Win11怎么制作U盘启动盘_Win11原版系统安装盘制作【详解】
如何在包含多值的列中精准搜索指定演员?
如何使用Golang log设置日志输出格式_Golang log日志格式示例
mac怎么查看wifi密码_MAC查看已连接WiFi密码方法【技巧】
如何使用Golang匿名函数_快速定义临时函数逻辑
如何使用Golang包导出规则_控制函数和变量可见性
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
c++ reinterpret_cast怎么用 c++最危险的类型转换【详解】
Python列表推导式与字典推导式教程_简化代码高效写法
Win11怎样彻底卸载自带应用_Win11彻底卸载自带应用方法【步骤】
Mac如何开启夜览模式_Mac护眼模式设置与定时
如何在Golang中使用replace替换模块_指定本地或远程路径
2026-01-04
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。