Golang出现泛型后,Gin怎么封装网络请求处理

简介: Go 1.18后出现泛型,小白怎么使用Gin框架怎么根据泛型封装客户端请求,

Go是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它能让构造简单、可靠且高效的软件变得容易。

  • 简洁、快速、安全
  • 并行、有趣、开源
  • 内存管理、数组安全、编译迅速
  • 更丰富的内置类型
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 语言交互性

Go在1.18后引入了泛型设计,怎么让增加泛型的Go,在开发Web上变得更加高效。
Go在引入泛型之前,只能用interface{}进行沾包。这样做的话想要对所有的参数进行统一绑定参数以及统一处理返回值是不太友好的。
原处理思路:使用反射获取处理的函数,绑定入参,Call函数,函数内部写response。
现处理思路:定义函数、response格式,绑定函数参数,处理返回值。

type Response struct {
  Code int    `json:"code"`
  Msg  string `json:"msg"`
  Data any    `json:"data"`
}
// 这里的Response只是针对于http response body的结构,并不是http response本身。

因为使用Gin作为Web框架,想要更好的结合Gin处理,泛型函数的返回值为 gin.HandlerFunc

func ParseFunc[T any](fn ParseFuncType[T], title string) gin.HandlerFunc

绑定参数:

       param := new(T)
// 根据入参类型分配内存
    err = c.ShouldBind(&param)
    if err != nil {
        ...
    }
    err = c.ShouldBindUri(&param)
    if err != nil {
        ...
    }
       response, err := fn(c, *param)
...

这样就能统一处理request

目录
相关文章
|
9月前
|
JavaScript
Vue中Axios网络请求封装-企业最常用封装模式
本教程介绍如何安装并配置 Axios 实例,包含请求与响应拦截器,实现自动携带 Token、错误提示及登录状态管理,适用于 Vue 项目。
371 1
|
8月前
|
Java 编译器 Go
【Golang】(5)Go基础的进阶知识!带你认识迭代器与类型以及声明并使用接口与泛型!
好烦好烦好烦!你是否还在为弄不懂Go中的泛型和接口而烦恼?是否还在苦恼思考迭代器的运行方式和意义?本篇文章将带你了解Go的接口与泛型,还有迭代器的使用,附送类型断言的解释
385 3
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
688 35
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
421 0
|
存储 缓存 Dart
Flutter&鸿蒙next 封装 Dio 网络请求详解:登录身份验证与免登录缓存
本文详细介绍了如何在 Flutter 中使用 Dio 封装网络请求,实现用户登录身份验证及免登录缓存功能。首先在 `pubspec.yaml` 中添加 Dio 和 `shared_preferences` 依赖,然后创建 `NetworkService` 类封装 Dio 的功能,包括请求拦截、响应拦截、Token 存储和登录请求。最后,通过一个登录界面示例展示了如何在实际应用中使用 `NetworkService` 进行身份验证。希望本文能帮助你在 Flutter 中更好地处理网络请求和用户认证。
932 1
|
网络协议 Java 程序员
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
【网络】局域网LAN、广域网WAN、TCP/IP协议、封装和分用
817 2
|
Go
Golang语言结构体(struct)面向对象编程进阶篇(封装,继承和多态)
这篇文章是关于Go语言中结构体(struct)面向对象编程进阶篇的教程,涵盖了Go语言如何实现封装、继承和多态,以及结构体内存布局的相关概念和案例。
702 4
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
849 0
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
网络协议 网络架构
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
708 0

热门文章

最新文章

推荐镜像

更多