当前位置: 首页 > news >正文

宁波网站建设制作订做取公司名字大全免费查询

宁波网站建设制作订做,取公司名字大全免费查询,佛山网站建设熊掌号,本地wordpress数据目录 背景 struct转map 使用json模块 使用reflect模块 使用第三方库 测试 总结 资料获取方法 背景 我们在前面介绍过怎么使用net/http发送json或者map数据,那么它能不能直接发送结构体数据呢?我们今天一起来学习结构体struct转map的三种方法&am…

目录

背景

struct转map

使用json模块

使用reflect模块

使用第三方库

测试

总结

资料获取方法


背景

我们在前面介绍过怎么使用net/http发送json或者map数据,那么它能不能直接发送结构体数据呢?我们今天一起来学习结构体struct转map的三种方法,为后续做铺垫。

struct转map

使用json模块

直接使用json.Marshal方法来强制转化struct。

参考代码:

func JSONMethod(content interface{}) map[string]interface{} {var name map[string]interface{}if marshalContent, err := json.Marshal(content); err != nil {fmt.Println(err)} else {d := json.NewDecoder(bytes.NewReader(marshalContent))d.UseNumber() // 设置将float64转为一个numberif err := d.Decode(&name); err != nil {fmt.Println(err)} else {for k, v := range name {name[k] = v}}}return name
}

使用reflect模块

通过reflect模块来获取结构体的key值和value值,然后直接进行组装。这种方法不能识别结构体中的tag,所以无法兼容首字母小写,而其他字母存在大写的情况.
参考代码:

func ReflectMethod(obj interface{}) map[string]interface{} {t := reflect.TypeOf(obj)v := reflect.ValueOf(obj)var data = make(map[string]interface{})for i := 0; i < t.NumField(); i++ {data[strings.ToLower(t.Field(i).Name)] = v.Field(i).Interface()}return data
}

使用第三方库

第三种方法是使用第三方库github.com/fatih/structs,他提供了比较丰富的函数,让我们可以像python中一样轻松的获取所有的key值(structs.Names(server)),所有的value值(structs.Values(server)),甚至直接进行类型判断(structs.IsZero(server))等等。

更详细的信息可以咨询我查阅

测试

type Human struct {Name     string `json:"name"`Age      int    `json:"age"`Profile  string `structs:"profile"`IsGopher bool   `json:"isGopher"`
}func main() {human := Human{"Detector", 18, "A tester", true}fmt.Println("Json method:", JSONMethod(human))fmt.Println("========")fmt.Println("Reflect method:", ReflectMethod(human))fmt.Println("========")fmt.Println("Third lb:", structs.Map(human))
}

输出如下:

总结

从测试结果可以看到,三种方式都能完成struct转map,但是reflect方法无法识别结构体中的tag,第三方库只能使用tag structs,所以如果考虑兼容性(考虑到协同开发)和尽量使用官方库的原则,推荐使用第一种方法(json转换)。

  • reflect.Field
  • json
  • structs

资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

http://www.yayakq.cn/news/277898/

相关文章:

  • 长沙网站seo源头厂家建设网银怎么开通使用
  • 营销型网站建设ppt皮肤科在线医生免费咨询
  • 企业网站开发毕业报告wordpress怎么调用默认的分页代码
  • 广州网站百度排名推广高德实时街景地图在线
  • 网站安全出格网站建设
  • 电商网站建设特色报纸版面设计模板
  • 体检中心网站建设方案计算机速成班培训
  • 企业年金险是什么意思seo联盟怎么赚钱
  • 四川汉舟电力建设有限公司网站网络营销的名词解释是什么
  • 做网站设计难吗微信运营是干嘛的
  • 网站 源码 phpapp网站维护
  • 歌曲伴奏在线制作网站新西兰网站开发专业
  • 佛山营销网站建设服务公司外贸的整个详细流程
  • 响应式网站的建设网站变灰
  • 建设棋牌网站流程在线解压rar网站
  • 网站科技动效营销型网站建设的特点
  • 五屏网站建设品牌好昆山专业网站建设
  • 万网空间最多放几个网站成都企业网站的建立
  • 网站制作费用一览表不懂代码做网站
  • 微信推送用哪个网站做wordpress 链接说明
  • 网站项目经费预算一个人可以看片
  • 个人适合做的网站快速网站优化哪家好
  • 内蒙古建设安全监督站的网站苏州旅游攻略
  • 高中网站建设计划表Wordpress链接的index
  • 怎么做浏览器网站医疗网站如何做优化
  • 购物网站php源代码网站开发数据库动态管理
  • 建设网站q8555 3807seo培训教程
  • 做网站如何上传apk建筑模板一般多少钱一块
  • html网站建设的步骤浏览网站内下载文件
  • 计算机多媒体毕业设计网站建设任丘网站建设