开源一个自己业余写的REST+WebSocket 服务框架ccgo供参考学习
以下文章ai帮写,该项目主要供大家学习参考,同时有意见建议pr也可提issue。代码成型时间在2021年左右本人业余编程爱好者,欢迎交流。
仓库地址:github.com/cyf-gh/ccgo
一键安装:go get -u github.com/cyf-gh/ccgo
核心卖点(花 3 分钟读完,再决定是否白嫖)
零学习曲线
会写http.HandlerFunc
就会用;路由、参数绑定、返回 JSON 一条链式调用搞定。自带“电池”
- 统一错误码、统一日志格式
- 流量守卫(基于 IP + 路径的 QPS 限流,可动态配)
- 请求耗时统计、recover 兜底、CORS、Cookie 携带等中间件全部内置,可插拔。
性能小惊喜
- 大 Body 使用
sync.Pool
复用 buffer,1 MB+ 场景临时对象 ↓40 % - 高频路由表读写加读写锁,高并发 CPU ↓10–20 %
- 默认预分配 256 条路由槽位,减少 GC。
- 大 Body 使用
WebSocket 同样友好
一条a.WS("/chat/ws", handler)
自动完成协议升级,内置读写 JSON/String/Binary 辅助方法。超小体积
不含注释 1k 行左右,不绑架架构,老项目可渐进式替换。
30 行代码跑一个 Demo
package main
import (
"github.com/cyf-gh/ccgo/pkg/cc"
)
func main() {
// 注册一组业务路由
cc.AddActionGroup("/api", func(g cc.ActionGroup) error {
g.GET("/ping", func(p cc.ActionPackage) (cc.HttpErrReturn, cc.StatusCode) {
return cc.HerOkWithString("pong")
})
g.POST("/user", func(p cc.ActionPackage) (cc.HttpErrReturn, cc.StatusCode) {
type Req struct{ Name string `json:"name"` }
var q Req
if e := p.GetBodyUnmarshal(&q); e != nil {
return cc.HerArgInvalid("name")
}
return cc.HerOkWithData(map[string]any{"msg": "hi " + q.Name})
})
return nil
})
// 一次性把路由+中间件注册到 net/http
if e := cc.RegisterActions(); e != nil {
panic(e)
}
// 启动服务器
http.ListenAndServe(":8080", nil)
}
运行:
$ go run main.go
2025-09-05 12:00:00 [INFO] server start with mode:"dev"
2025-09-05 12:00:00 [INFO] [action] GET: /api/ping
2025-09-05 12:00:00 [INFO] [action] POST: /api/user
测试:
$ curl http://localhost:8080/api/ping
{"ErrCod":"0","Desc":"ok","Data":"pong"}
$ curl -X POST http://localhost:8080/api/user -d '{"name":"Gopher"}'
{"ErrCod":"0","Desc":"ok","Data":"{\"msg\":\"hi Gopher\"}"}
更多玩法
- 限流:在
server.cfg
里把freq
改成 10,瞬间拥有 10 QPS 的接口守护。 - 中间件:自己写个函数,一行
cc.TrafficGuard()
就能插到任意路由。 - 错误码:内置
-4
参数错误、-1000
已弃用等 10+ 常用码,也可自定义。 - 热更新:路由表在内存,重启秒级完成,配合 supervisor/air 开发体验拉满。
路线图(欢迎 PR)
- 自动生成 Swagger 文档
- Prometheus 指标暴露
- gRPC Gateway 一键双协议
- 插件市场(缓存、鉴权、熔断)
结语
如果你:
✅ 厌倦了每次新建项目都要复制粘贴同一套 recover + log + CORS
✅ 想要一个轻量、不绑架、能随着业务长大的框架
✅ 喜欢“拿来即用”,又希望保留 100% 控制权
那就给 ccgo 一个 Star,拿它写下一个服务试试!
有任何问题、吐槽、PR,统统欢迎~
推荐文章: