开源一个自己业余写的REST+WebSocket 服务框架ccgo供参考学习

以下文章ai帮写,该项目主要供大家学习参考,同时有意见建议pr也可提issue。代码成型时间在2021年左右本人业余编程爱好者,欢迎交流。

仓库地址:github.com/cyf-gh/ccgo
一键安装:go get -u github.com/cyf-gh/ccgo

核心卖点(花 3 分钟读完,再决定是否白嫖)

  1. 零学习曲线
    会写 http.HandlerFunc 就会用;路由、参数绑定、返回 JSON 一条链式调用搞定。

  2. 自带“电池”

    • 统一错误码、统一日志格式
    • 流量守卫(基于 IP + 路径的 QPS 限流,可动态配)
    • 请求耗时统计、recover 兜底、CORS、Cookie 携带等中间件全部内置,可插拔。
  3. 性能小惊喜

    • 大 Body 使用 sync.Pool 复用 buffer,1 MB+ 场景临时对象 ↓40 %
    • 高频路由表读写加读写锁,高并发 CPU ↓10–20 %
    • 默认预分配 256 条路由槽位,减少 GC。
  4. WebSocket 同样友好
    一条 a.WS("/chat/ws", handler) 自动完成协议升级,内置读写 JSON/String/Binary 辅助方法。

  5. 超小体积
    不含注释 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,统统欢迎~

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!