首页 > 其他分享 >在Go中使用自定义类型与Swagger集成

在Go中使用自定义类型与Swagger集成

时间:2024-11-14 11:07:52浏览次数:1  
标签:RechargeType 自定义 充值 Swagger 类型 Go 序列化

在Go语言中,自定义类型可以帮助我们更好地组织代码和增强可读性。在本篇博客中,我们将探讨如何创建一个自定义类型,并将其与Swagger文档集成,以便在API中正确序列化和展示。

1. 创建自定义类型

首先,我们定义一个名为 RechargeType 的自定义类型。这个类型将用于表示不同的充值方式。

 
package main

// RechargeType 自定义类型
type RechargeType string

const (
    RechargeTypeChain RechargeType = "chain" // 链上充值
    RechargeTypeScan  RechargeType = "scan"  // 扫码充值
    RechargeTypeXTR   RechargeType = "star"  // 星币充值
    RechargeTypeRUB   RechargeType = "rub"   // 卢布充值
)
 

2. 定义结构体

接下来,我们定义一个结构体 MyStruct,其中包含一个 RechargeType 类型的字段。我们将使用这个结构体作为API请求和响应的基础。

 
// MyStruct 示例结构体
type MyStruct struct {
    Type RechargeType `json:"type" swaggertype:"string"` // 使用 swaggertype 标签
}

2.1 JSON序列化与反序列化

为了确保我们的自定义类型能够正确地序列化为JSON格式,我们需要实现 MarshalJSON 和 UnmarshalJSON 方法:

import (
    "encoding/json"
)

// MarshalJSON 自定义序列化方法
func (r RechargeType) MarshalJSON() ([]byte, error) {
    return json.Marshal(string(r))
}

// UnmarshalJSON 自定义反序列化方法
func (r *RechargeType) UnmarshalJSON(data []byte) error {
    var s string
    if err := json.Unmarshal(data, &s); err != nil {
        return err
    }
    *r = RechargeType(s)
    return nil
}
   

3. 集成Swagger

要使Swagger能够识别我们的自定义类型并生成文档,我们需要确保在结构体字段上添加适当的注释。然后,运行以下命令以生成Swagger文档:

bash swag init

此命令会扫描您的代码并生成所需的Swagger配置。

5. 总结

通过以上步骤,我们成功创建了一个自定义类型,并将其与Swagger集成。这使得我们的API不仅能够正确处理请求和响应,还能在Swagger文档中清晰地展示该字段的含义和有效值。这样的做法提升了代码的可读性和可维护性,也为其他开发者提供了更好的使用体验。

标签:RechargeType,自定义,充值,Swagger,类型,Go,序列化
From: https://www.cnblogs.com/zhanchenjin/p/18545594

相关文章

  • GoldenGate抽取进程延迟严重,论FETCHOPTIONS NOUSESNAPSHOT的重要性
    1、案例概述同事新搭建的一套GoldenGate环境,刚刚搭建时,Extract抽取进程就已经出现延迟现象,当时想着可能很快就能追平,所以最开始也没当回事。结果两天时间,延迟现象没有缓解,已经累积延迟30多个小时。通过info或者stats等命令查看进程状态信息,发现该Extract抽取进程仍然在工作,只......
  • MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)
    目录项目背景介绍...1项目目标与意义...1项目挑战...2项目特点与创新...2项目应用领域...3项目效果预测图程序设计...3项目模型架构...4项目模型描述...4项目模型算法流程图...5项目结构设计...5项目部署与应用...6项目扩展...6项目应该注意事项...6......
  • R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表
    R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表连接、data.table使用自定义函数及Reduce函数实现一次性性多表连接目录R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表连接#data.table是什么?#dat......
  • socketcan-goloang
    模拟接收 模拟发送 packagemainimport("context""fmt""go.einride.tech/can""go.einride.tech/can/pkg/candevice""go.einride.tech/can/pkg/socketcan")funcmain(){//linux系统设置......
  • 《Django 5 By Example》阅读笔记:p54-p75
    《Django5ByExample》学习第3天,p54-p75总结,总计22页。一、技术总结1.分页(1)分页:Paginator(2)页数不存在处理:EmptyPage,PageNotAnInteger2.class-basedviews(类视图)(1)为什么使用类视图?1)OrganizecoderelatedtoHTTPmethods,suchasGET,POST,orPUT,insep......
  • vscode + typora + picgo 搭建高效博客(cnblog)工作流
    vscode+typora+picgo搭建高效博客(cnblog)工作流笔者最初在cnblog上面发了很多随笔(水文),后面感觉广告有点多,并且难于管理文章,于是破罐破摔(不要学我)搭建了自己的博客。后来,我折腾过wordpress、jeklly、githubPages(hexo)和giteePages等等,既放不下cnblog上的流量与互动(......
  • 2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义
    2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k,定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。找出nums中长度为k的所有子序列的能量和,对结果取模10^9+7后返回。输入:nums=[1,2,3,4],k=3。输出:4。解释:......
  • Go语言函数
    函数入门简单精通难函数式编程1、什么是函数函数就是一段代码的集合go语言中至少要有一个main函数函数需要有一个名字,独立定义的情况下。见名知意函数可能需要有一个结果,也可能没有funcprint(){ fmt.Println("hello")}packagemainimport"fmt"funcmain(){......
  • CICD03 Jenkins对golang项目构建, 结合ansible, 构建通知, 自动化构建(定时,webhook),
    2.7.2基于Maven风格的任务构建基于WAR包运行Tomcat服务器JAVA项目maven配置繁琐,功能固定不灵活,不如自由风格好用,这里推荐用自由风格脚本实现更好目前最高依赖到tomcat9,更高版本的tomcat不支持2.7.2.2安装tomcat服务器和配置#在gitlab新建java项目(此项目使用JD......
  • Go中数组和切片
    数组和切片【1】、数组1、什么是数组一组数数组需要是相同类型的数据的集合数组是需要定义大小的数组一旦定义了大小是不可以改变的。packagemainimport"fmt"//数组//数组和其他变量定义没什么区别,唯一的就是这个是一组数,需要给一个大小[6]int[10]string/......