当前位置: 首页 > 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":"成功"}

相关文章:

ginbuilder 工具快速创建

ginbuilder github 地址 快速创建一个ginweb项目&#xff1a; 目前apps下只有http服务&#xff0c;如果后续有需要的话&#xff0c;会添加上rpc服务&#xff0c;websocket服务后边如果有需要会添加上swagger 创建完成的目录结构 ├── apps │ ├── apis // 所有的apis…...

【Java基础面试宝典】堆、栈、方法区分别都存储了那些内容?wait 和 sleep 方法的区别?

目录 堆、栈、方法区分别都存储了那些内容&#xff1f; 堆&#xff08;heap&#xff09; 栈&#xff08;stack&#xff09; 方法区&#xff08;method&#xff09; 在 java 中 wait 和 sleep 方法的区别&#xff1f; 堆、栈、方法区分别都存储了那些内容&#xff1f; 堆&a…...

古剑飞仙手游Linux系统服务器架设教程

安装宝塔直接运行命令即可。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 搭建环境&#xff1a; centos 7以上系统服务器 宝塔面板安装应用如下&#xff1a; Nginx1.14 mysql5.7 php5.6 1…...

python实战应用讲解-【numpy数组篇】常用函数(十)(附python示例代码)

目录 Python Numpy MaskedArray.ravel()函数 Python Numpy MaskedArray.reshape()函数 Python Numpy MaskedArray.resize()函数 Python Numpy MaskedArray.std()函数 Python Numpy MaskedArray.sum()函数 Python Numpy MaskedArray.swapaxes()函数 Python Numpy MaskedA…...

计算机组成原理(考研408)练习题#2

用于复习408或计算机组成原理期末考试。如有错误请在评论区指出。 So lets start studying with questions! それでは、問題の勉強を始めましょう&#xff01; 11.某 cache 采用全相联映射&#xff0c;假设 cache 有 3 块&#xff0c;程序运行过程中需要访问的主存块号依 次为…...

Apache POI,springboot中导出excel报表

2. Apache POI 2.1 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 Apache POI 的应用场景…...

CSS(一)-- 三种样式表

目录 1. 行内样式表 2. 内部样式表 3. 外部样式表&#xff08;即引入 .css文件&#xff09;&#xff08;重点掌握&#xff09; 1. 行内样式表 行内样式表&#xff08;内联样式表&#xff09;是在元素标签内部的 style 属性中设定 CSS 样式。适合于修改简单样式。 <di…...

嵌入式之Samba服务器搭建

在嵌入式系统开发应用平台中&#xff0c;tftp、nfs和samba服务器是最常用的文件传输工具 tftp和nfs是在嵌入式Linux开发环境中经常使用的传输工具 samba则是Linux和Windows之间的文件传输工具。 下面演示在linux上搭建Samba服务器 sudo apt-get install samba chmod -R 77…...

vue3+go——看到了就去学习吧

vue3go——看到了就去学习吧 Vue3.2 Vite Element-Plus 实现最基础的 CRUD1.效果展示【02:36】2.创建项目【03:16】3.添加github管理【04:10】4.引入element-plus【04:21】5.内容布局【08:59】6.布局优化【05:31】7.添加弹窗【09:34】8.ref改$ref【02:47】9.新增数据【09:22】…...

Perf工具统计CPU性能

Perf 性能检测工具 Perf 是一个内置于Linux内核中的工具&#xff0c;用于性能分析和调优。它可以对系统的CPU使用情况、内存使用情况、磁盘I/O、网络I/O等进行监控和分析&#xff0c;并提供了丰富的分析和可视化工具&#xff0c;以帮助用户定位和解决性能问题。perf可以进行函…...

考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

来&#xff0c;猜猜看&#xff0c;这里的执行结果是什么&#xff1f; 这是今天课上的一道理解题&#xff0c;给大家一点点思考时间。 &#xff08;心里有答案了再往下滑哦&#xff09; 5 4 3 2 1 . 答案是&#xff0c;报warning&#xff01;因为%d不是用来输出指针的哈…...

英语基础-介词

介词 方位介词 in:在…里面 Its in the box. 在盒子里 in my backpack 在背包里 in the tree 长在树上on:在…上面&#xff08;指与物体表面接触&#xff09; Its on the box. 在盒子上(和盒子接触) on the floor.在地板上 on the tree.在树上under:在…下面 Its unde…...

Linux进程通信:进程组 会话

1. 进程组 &#xff08;1&#xff09;概念&#xff1a;一个或多个进程的集合&#xff0c;也称为“作业”。 &#xff08;2&#xff09;父进程创建子进程时&#xff0c;默认属于同一个进程组。进程组ID为组长进程ID。 &#xff08;3&#xff09;进程组中只要有一个进程存在&a…...

【前端面经】JS-深浅拷贝

理解深浅拷贝 深浅拷贝问题的出现是由于JavaScript对不同类型的存储方式而引发的。 对于原始数据类型&#xff0c;它们的值是直接存储在栈内存中&#xff1b; 而复杂数据类型&#xff0c;则在栈内存中记录它的指针&#xff0c;而指针指向堆内存中真正的值。 所以对于原始数据类…...

【自然语言处理】实验2布置:Word2Vec TransE案例

NLP_class 学堂在线《自然语言处理》实验课代码报告&#xff0c;授课老师为刘知远老师。课程链接&#xff1a;https://www.xuetangx.com/training/NLP080910033761/1017121?channeli.area.manual_search。 持续更新中。 所有代码为作者所写&#xff0c;并非最后的“标准答案…...

Redis集合底层实现原理

目录 本章重点简单动态字符串SDS集合底层实现原理zipListlistPackskipListquickListKey 与Value中元素的数量 本章重点 掌握Redis简单动态字符串了解Redis集合底层实现原理 简单动态字符串SDS SDS简介 我们Redis中无论是key还是value其数据类型都是字符串.我们Redis中的字符…...

OVS常用命令与使用总结

OVS常用命令与使用总结 说明 在平时使用ovs中&#xff0c;经常用到的ovs命令&#xff0c;参数&#xff0c;与举例总结&#xff0c;持续更新中… 进程启动 1.先准备ovs的工作目录&#xff0c;数据库存储路径等 mkdir -p /etc/openvswitch mkdir -p /var/run/openvswitch …...

一以贯之:从城市网络到“城市一张网”

《论语里仁》中子曰&#xff1a;“参乎&#xff0c;吾道一以贯之”。 孔子所说的“一以贯之”&#xff0c;逐渐成为了中国文化与哲学的重要组成部分&#xff0c;指明事物发展往往需要以标准化、集约化、融合化作为目标。这种智慧在数字化发展中格外重要。从云计算、大数据技术模…...

【Java校招面试】基础知识(四)——JVM

目录 前言一、基础概念二、反射三、类加载器ClassLoader四、JVM内存模型后记 前言 本篇主要介绍Java虚拟机——JVM的相关内容。 “基础知识”是本专栏的第一个部分&#xff0c;本篇博文是第四篇博文&#xff0c;如有需要&#xff0c;可&#xff1a; 点击这里&#xff0c;返回…...

项目管理-计算专题(三点估算、PERT估算)

基本概念 通过考虑估算中的不确定性和风险&#xff0c;可以提高活动持续时间估算的准确性。这个概念源自计划评审技术(PERT)。PERT使用三种估算值来界定活动持续时间的近似区间: 最可能时间(tM)&#xff1a;基于最可能获得的资源、最可能取得的资源生产率、对资源可用时间的现…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...