线上服务器,同一个web接口有时需要兼容不同版本的结构体。这种情况思路是使用interface{}接收任意类型数据,结合reflect包处理。

如下,http接口调用者会传入不同的json结构数据(单体结构或切片结构):

type ReqStu struct {
XXX struct {               //XXX结构为单体
AAA string `json:"aaa"`
BBB string `json:"bbb"`
CCC string `json:"ccc"`
} `json:"xxx"`
}

  

type ReqStu struct {
XXX []struct {                //XXX为数据体切片
AAA string `json:"aaa"`
BBB string `json:"bbb"`
CCC string `json:"ccc"`
} `json:"xxx"`
}

  

兼容不同XXX结构体的方法是使用interface{},接收任意类型数据。

type ReqStu struct {
XXX interface{} `json:"xxx"`
}

代码实现方面,使用反射判断XXX类型kind。

switch reflect.ValueOf(Req.XXX).Kind() {//通过反射kind方法获取XXX数据类型
case reflect.Slice, reflect.Array://切片或数组类型的处理
var SliceTemp = []struct {
AAA string `json:"aaa"`
BBB string `json:"bbb"`
CCC string `json:"ccc"`
}{} if err := json.Unmarshal([]byte(Req),&SliceTemp );err != nil{
return
}
    //range操作SliceTemp... default://默认单结构体
var SingleTemp = struct {
AAA string `json:"aaa"`
BBB string `json:"bbb"`
CCC string `json:"ccc"`
}{} if err := json.Unmarshal([]byte(Req),&SingleTemp );err != nil{
return
}
    //操作SingleTemp...
}

golang 兼容不同json结构体解析实践的更多相关文章

  1. Golang通过反射获取结构体的标签

    Golang通过反射获取结构体的标签 例子: package main import ( "fmt" "reflect" ) type resume struc ...

  2. golang 处理 json 结构体

    首先 我们来看一下这个json 字串 { "resp": { ", "respMsg": "成功", "app" ...

  3. Golang通过结构体解析和封装XML

    Golang解析和封装XML 解析XML成结构体Demo package main import ( "encoding/xml" "fmt" ) //我们通过 ...

  4. Go语言使用匿名结构体解析JSON数据

    手机拥有屏幕.电池.指纹识别等信息,将这些信息填充为 JSON 格式的数据.如果需要选择性地分离 JSON 中的数据则较为麻烦.Go 语言中的匿名结构体可以方便地完成这个操作. 首先给出完整的代码,然 ...

  5. Golang 通过创建临时结构体实现 struct 内 interface struct 的 json 反序列化

    原文链接 背景 type AData struct { A string `json:"a"` } type BData struct { B string `json:" ...

  6. file_operations结构体解析 1

    注:学了这么长时间了,还没有好好看看 file_operations机构体,这其中还有很多的东西,当你学着学着的时候,就会用到这里面的一些系统调用对应的函数了,我在网上搜索之后,记录如下,一边将来查看 ...

  7. golang 使用reflect反射结构体

    "反射结构体"是指在程序执行时,遍历结构体中的字段以及方法. 1.反射结构体 下面使用一个简单的例子说明如何反射结构体. 定义一个结构体,包括3个字段,以及一个方法. 通过refl ...

  8. struct 结构体解析(原)

    (一)基本概念 结构体是一个或是多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组合在一个名字之下.我们将关键字struct引入了结构声明中.结构声明包含在花括号内的一系列声明组成 ...

  9. 用结构体解析Pascal字符串

    来源:https://www.cnblogs.com/qiuyuwutong/p/8708844.html 1.什么是柔性数组? 柔性数组既数组大小待定的数组, C语言中结构体的最后一个元素可以是大小 ...

随机推荐

  1. Memory Leak Detection in Embedded Systems

    One of the problems with developing embedded systems is the detection of memory leaks; I've found th ...

  2. xcode9 unity3d 新坑

    1.metal调试会报错,要在edit scheme里关掉

  3. 迷宫问题——BFS

    改进版 BFS #include <bits/stdc++.h> using namespace std; #define coordi(x,y) ( m*(x-1)+y ) const ...

  4. POJ-2992 Divisors---组合数求因子数目

    题目链接: https://cn.vjudge.net/problem/POJ-2992 题目大意: 给出组合数Cnk,求出其因子个数,其中n,k不大于431,组合数的值在long long范围内 解 ...

  5. CPU与GPU区别大揭秘

    http://blog.csdn.net/xiaolang85/article/details/51500340 有网友在网上提问:“为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚至破解 ...

  6. Codeforces 955C - Sad powers(数论 + 二分)

    链接: http://codeforces.com/problemset/problem/955/C 题意: Q次询问(1≤Q≤1e5),每次询问给出两个整数L, R(1≤L≤R≤1e18),求所有符 ...

  7. sqoop 1.99.7 安装及配置

    一  下载sqoop 1.99.7 http://mirror.bit.edu.cn/apache/sqoop/1.99.7/ 二 解压安装文件 三 配置Sqoop 环境变量 最后把mysql的驱动j ...

  8. layUI不同页面传参数

    //页面一的方法 function modifyHotSearch(id){ layer.open({ type:2, title:"修改热门搜索", area: ['600px' ...

  9. Keil开发的ARM程序main函数之前的汇编分析

    Keil开发的ARM程序main函数之前的汇编分析 ——BIN文件中RW段的数据移动 系统平台: STM32系列STM32F103ZE,512KB内部FLASH,64KB片内存储; FLASH地址范围 ...

  10. sharepoint OOS巨大坑

    首先,我们安装的操作系统是windows server 2016 datacenter最新版,然后安装了OOS2016年的那个版本,打好语言包,安装必备软件,所有的步骤都没问题,但是你配置OOS场的时 ...