当前位置: 首页 > news >正文

ginbuilder 工具快速创建

ginbuilder github 地址

  • 快速创建一个ginweb项目: 目前apps下只有http服务,如果后续有需要的话,会添加上rpc服务,websocket服务
  • 后边如果有需要会添加上swagger

创建完成的目录结构

├── apps
│  ├── apis  // 所有的apis
│  │  ├── api.go  // api处理入口文件
│  │  └── hello   // hello demo
│  │      └── hello.go
│  ├── routers
│  │ ├── hello_router.go        // 不同的路由处理位置,hello.go 为测试路由
│  │ └── init_router.go         // 路由的初始化,项目优雅启动,优雅停止
│  └── service   // 所有服务的存储位置
│     └── hello.go
├── common                 // 全局包
│  ├── errorx
│  │  └── errorx.go
│  ├── logx
│  │  └── logx.go
│  └── responsex
│      └── responsex.go
├── config                 // 配置文件
│  ├── config.go
│  ├── config.yaml
│  └── internal_config
│      ├── logger.go
│      ├── mysql.go
│      ├── redis.go
│      └── system.go
├── global                 // 公用变量
│  └── global.go
├── go.mod
├── go.sum
├── internal               // 私有依赖
│  ├── mysql.go
│  └── redis.go
├── logs                   // 日志存储位置
│  └── 2023-04-28
│      └── ginbuilder.log
└── main.go                // 项目入口

使用该工具可以快速创建ginweb服务

1. 完成日志的初始化

  • 使用该日志库: “go.uber.org/zap”
  • 只需要修改config.yaml中的配置即可修改zap对应的配置

2. 封装gin路由

package routersimport ("{{.PkgName}}/global""context""fmt""go.uber.org/zap""net/http""os""os/signal""time""github.com/gin-gonic/gin"
)func runServer(router *gin.Engine) {srv := &http.Server{Addr:    fmt.Sprintf("%v:%d", global.GlobalC.System.Host, global.GlobalC.System.Port),Handler: router,}go func() {if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {zap.S().Fatalf("listen: %s\n", err)}}()quit := make(chan os.Signal)signal.Notify(quit, os.Interrupt)<-quitzap.S().Infoln("Listener Server ...")ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)defer cancel()if err := srv.Shutdown(ctx); err != nil {zap.S().Fatal("Server Shutdown:", err)}select {case <-ctx.Done():zap.S().Infoln("timeout of 3 seconds.")}zap.S().Infoln("Server exiting")
}

3. 初始化gorm

  • 使用该库: “gorm.io/gorm”

4. 初始化redis

  • 使用该库: “github.com/go-redis/redis/v8”

5. 封装response的基本响应结构


package responseximport ("{{.PkgName}}/common/errorx""github.com/gin-gonic/gin""net/http"
)type Response struct {Code    int    `json:"code"`Data    any    `json:"data"`Message string `json:"msg"`
}func Result(code int, data any, msg string, c *gin.Context) {c.JSON(http.StatusOK, Response{Code:    code,Data:    data,Message: msg,})
}func Ok(data any, msg string, c *gin.Context) {Result(int(errorx.SuccessCode), data, msg, c)
}func OkWithData(data any, c *gin.Context) {Result(int(errorx.SuccessCode), data, "成功", c)
}func OkWithMessage(msg string, c *gin.Context) {Result(int(errorx.SuccessCode), map[string]any{}, msg, c)
}func OkWith(c *gin.Context) {Result(int(errorx.SuccessCode), map[string]any{}, "成功", c)
}func Fail(data any, msg string, c *gin.Context) {Result(int(errorx.FailedCode), data, msg, c)
}func FailWithMessage(msg string, c *gin.Context) {Result(int(errorx.FailedCode), map[string]any{}, msg, c)
}func FailWithCode(code errorx.ErrorCode, msg string, c *gin.Context) {msg, ok := errorx.ErrorMap[code]if ok {Result(int(code), map[string]any{}, msg, c)}Result(int(errorx.FailedCode), map[string]any{}, msg, c)
}

6. 简单封装error状态码

package errorxtype ErrorCode intconst (SuccessCode   ErrorCode = 1000 // 成功SettingsError ErrorCode = 1001 //系统错误ArgumentError ErrorCode = 1002 //参数错误FailedCode    ErrorCode = 1999 // 返回失败
)var (ErrorMap = map[ErrorCode]string{SettingsError: "系统错误",ArgumentError: "参数错误",SuccessCode:   "成功",FailedCode:    "失败",}
)

使用方法

1. 安装ginbuilder

go install github.com/coderitx/ginbuilder@latest

2. 创建项目

# 项目会创建在 $GOPATH/src 下
# 如果不指定pkg,则会默认使用project同名
ginbuilder -project ${project-name} -pkg ${project-package-name}

3. 启动

cd ${projeck_path}
go mod tidy
go run main.go

4. 访问测试

浏览器直接访问:

  • hello
{"code":0,"data":"hello ${package name}","msg":"成功"}

命令行直接访问

curl 127.0.0.1:9999/api/hello{"code":0,"data":"hello ${package name}","msg":"成功"}
http://www.lryc.cn/news/64126.html

相关文章:

  • 【Java基础面试宝典】堆、栈、方法区分别都存储了那些内容?wait 和 sleep 方法的区别?
  • 古剑飞仙手游Linux系统服务器架设教程
  • python实战应用讲解-【numpy数组篇】常用函数(十)(附python示例代码)
  • 计算机组成原理(考研408)练习题#2
  • Apache POI,springboot中导出excel报表
  • CSS(一)-- 三种样式表
  • 嵌入式之Samba服务器搭建
  • vue3+go——看到了就去学习吧
  • Perf工具统计CPU性能
  • 考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?
  • 英语基础-介词
  • Linux进程通信:进程组 会话
  • 【前端面经】JS-深浅拷贝
  • 【自然语言处理】实验2布置:Word2Vec TransE案例
  • Redis集合底层实现原理
  • OVS常用命令与使用总结
  • 一以贯之:从城市网络到“城市一张网”
  • 【Java校招面试】基础知识(四)——JVM
  • 项目管理-计算专题(三点估算、PERT估算)
  • 【华为OD机试 2023最新 】模拟商场优惠打折(C语言题解 100%)
  • 使用TrieTree(字典树)来实现敏感词过滤
  • USB转串口芯片CH9101U
  • Java语言介绍
  • 终于把 vue-router 运行原理讲明白了(二)!!!
  • ChatGPT实现服务器体验沙箱
  • 【算法】刷题中的位运算
  • 9.Java中异常处理机制是什么
  • GeoTools实战指南: 叠加GeoTIFF与Shapefile图层生成截图
  • nginx配置sh脚本远程执行一键安装
  • Excel表格成绩排名全攻略,让你事半功倍!