gin context和官方context_Go Web 小技巧(一)简化Gin接口代码

该博客探讨了在使用Gin构建API服务时如何简化代码和处理参数绑定及错误返回的问题。作者通过封装返回值结构体和利用Go接口特性,提出了解决重复逻辑的辅助函数方法,减少了API编写中的常见痛点。此外,文章还提出了进一步完善代码的思考,如自动参数绑定、API文档生成和CURD代码自动生成的解决方案。
摘要由CSDN通过智能技术生成

不知道大家在使用 Gin 构建 API 服务时有没有这样的问题:

  1. 参数绑定的环节可不可以自动处理?
  2. 错误可不可以直接返回,不想写空 return, 漏写就是 bug

本文通过简单地封装,利用 go 的接口特性,提供一个解决上述两个问题的思路

一、解决过程

1.1 刚开始时写 API 服务时

我们刚开始使用 Gin 写 API 服务时,一般会按照官方文档上的 这么写

// User 用户结构
type User struct {
    
    UserName string
}

// CreateUser 创建用户
func CreateUser(ctx *gin.Context) {
    
    var params User
    if err := ctx.ShouldBind(&params); err != nil {
    
        ctx.JSON(http.StatusBadRequest, gin.H{
    
            "code": 400,
            "msg":  "参数错误",
        })

        logrus.Errorf("params err, %v", params)
        return
    }

    // 一些其他的业务逻辑 ...

    ctx.JSON(http.StatusOK, gin.H{
    
        "code": 0,
        "msg":  "创建成功",
    })
}

func main() {
    
    r := gin.Default()
    r.POST("user", CreateUser)
    if err := r.Run(":8080"); err != nil {
    
        logrus.Fatalf("can not start serve: %v", err)
    }
}

1.2 封装返回值

我们写了一段时间之后,会发现,我们的返回值的结构是固定的,为什么不抽象一下呢,所以我们创建了一个结构体 Resp ,并且封装了两个方法用于成功和失败这两种状态的返回

// resp.go

// Resp 返回
type Resp struct {
    
    Code int
    Msg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值