go语言中结构体struct转map及功能实现示例代码

2023-06-01 00:00:00 语言 示例 结构

go语言中没有类的概念但是有结构体,结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性

map是一种无序的基于key-value的数据结构,类似PHP的数组,不过php数组是有序的


go语言做开发的时候,类型转换是做的最多了

下面分享struct转map功能及实现两个功能函数


1.struct转map:返回的map键为struct的成员名

// @title struct转map 返回的map键为struct的成员名
func StructToMap(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[t.Field(i).Name] = v.Field(i).Interface()
       
    }
   
    return data
}


2.struct转map:返回的map键为struct的json键名

// @title struct转map 返回的map键为struct的json键名
func StructToMapJson(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++ {
   
        jsonKey := t.Field(i).Tag.Get("json")
       
        if jsonKey != "-" {
            data[jsonKey] = v.Field(i).Interface()
        }
       
    }
   
    return data
}

有需要的可以自行测试

相关文章