# gin-pro **Repository Path**: nicoli/gin-pro ## Basic Information - **Project Name**: gin-pro - **Description**: 基于Gin打造的开箱即用的快速后端开发框架,集成了包括Db、Sse、Kafka、Jwt、Redis、Vqdrant Vector、gRPC、并发任务调用、Python调用、yaml文件自动装载、简化路由配置加载、Token认证、跨域、限流等功能。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-08 - **Last Updated**: 2026-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, SSE, vector, Grpc, go-python ## README # gin-pro #### 介绍 基于Gin打造的开箱即用的快速后端开发框架,集成了包括Db、Sse、Kafka、Jwt、Redis、gRPC、并发任务调用、Python调用、yaml文件自动装载、简化路由配置加载、Token认证、跨域、限流等功能(Vqdrant Vector集成中)。 #### 软件架构 软件架构说明 #### 安装教程 1. 安装GO、PYTHON 2. git clone https://gitee.com/nicoli/gin-pro.git 3. go mod init gin-pro 4. go mod tidy #### 使用说明 1. config.yaml文件中配置数据库等的相关信息 2. 数据库配置 database: mysql: open: true 3. Redis配置 redis: open: false 4. 任务调度配置(为true时自动初始化) task: open: false 5. Kafka配置 mq: kafka: open: false 6. 本地RPC服务配置 grpc: port: 50051 提供了本地RPC服务的需要该配置 7. 外部RPC服务调用配置 grpc: remote_servers: - code: L1 addr: <远程地址>:端口 8. 路由配置文件router.json [ { "group":"/auth", //路由分组,取决于Handler的结构体,如AuthHandler,则group的值为auth "routers":[ { "auth": false, //是否需要认证 "path": "/:client/login", //访问路径 "type":"POST", //访问方式 "method": "Login" //对应handler的实现方法 }, { "auth": true, "path": "/logout", "type":"POST", "method": "Logout" } ] } ] 9. db.InitDB() //初始化数据库连接,open配置为true时,将连接数据库 comm.InitRedis() //初始化Redis连接,open配置为true时,将连接Redis库 kafka.InitProducer() //初始化同步生产者, open配置为true时,将连接Kafka kafka.InitAsyncProducer() //初始化异步生产者, open配置为true时,将连接Kafka //RPC相关 rpc.InitClient() //初始化rpc客户端连接 //启动本地RPC服务 go rpc.ServerStart(func(s *grpc.Server) { pb.RegisterUserServiceServer(s, &server.UserServer{}) //注册本地RPC业务 }) //路由注册 comm.RegistRouter(r, func() []interface{} { return []interface{}{ &handler.AuthHandler{Dao: &repository.UserDao{}}, &handler.UserHandler{Dao: &repository.UserDao{}}, &handler.TaskHandler{}, &handler.CozeHandler{}, &handler.PyHandler{}, &handler.RpcHandler{}, &handler.StreamHandler{}, } }) 10. 示例 //Redis使用 comm.RSet("name", "李晓成") comm.RGet("name") //Task调度使用 t := task.TaskInfo{} t.Name = "李晓成" t.ID = task.AddTask(t, func(ti task.TaskInfo) { fmt.Printf("执行任务id=%d, name=%s", ti.ID, ti.Name) //执行逻辑 }) //db使用 //定义Dao func (dao *UserDao) QryUser(id string) (*model.User, error) { if d, err := db.Exec(func(db *db.Db) *model.User { var data model.User cnt := db.Where("ID = ?", id).First(&data).RowsAffected if cnt == 0 { return nil } return &data }); err == nil { return d, nil } else { return nil, err } } //流式请求使用 // 注册一个本地的流式服务接口 func (h *StreamHandler) RpcStream(c *gin.Context) { gsse.RegistSse(c, s2cStream) } //流式请求一个远程接口 func (h *CozeHandler) CozeCall(c *gin.Context) { params := map[string]interface{}{ "bot_id": "7594321163124949043", "user_id": "U-31", "content": "你好,请帮我整理下红楼梦的脉络", } gsse.ReqSsePost(c, _CozeV3Cfg, params) } //Python调用 //Python内容 import sys import json def add(a, b): return a + b if __name__ == "__main__": if sys.argv and sys.argv[1] : jv = json.loads(sys.argv[1]) print(add(jv['a'], jv['b'])) else: print("add(a, b)的参数缺失") //Go调用 func (h *PyHandler) PyTest(c *gin.Context) { arg := `{"a":3, "b":6}` ret, ok := comm.OsExecPy("./python/mylib3.py", arg) if ok { if str, ok := ret.(string); ok { v, _ := strconv.Atoi(str) c.JSON(http.StatusOK, comm.OkD(v)) return } } c.JSON(http.StatusExpectationFailed, comm.ErrMsg(ret)) } #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)