类型any(interface{}的别名)在某种程度上类似于指针(尽管它也存储类型信息),因此您可以执行以下操作: mymap := map[string]inteface{}{ "StructA": StructA{}, "StructB": StructB{},} 为了更安全一点,可以将可以添加到映射的类型限制为仅两个结构。为此,您需要一个接口来指定两种结构类型都实现的函数。
v:=map[string]string{"time":"2019-07-02"}typeResultstruct{Timetime.Time`json:"time"`} 首先...
在有些场景下,我们需要用一个map[string]interface{}, map的key是struct中的一个tag的值, value是需要赋值的值,我们可以使用reflect包来进行操作。 我们需要struct的指针,只有指针我们才能在函数中改变struct的值 根据指针获取struct的实例,Type 依次遍历struct的域,取出域中的tag和map中的key进行比较,然后比较域的T...
v:=map[string]string{"time":"2019-07-02"}typeResultstruct{Timetime.Time`json:"time"`} 首先...
// 方法1:使用go中标准库里的json编码成[]byte,然后再解码到map里 //data, _ := json.Marshal(&User)//m := make(map[string]any) //json.Unmarshal(data, &m)//Struct2map方法2:通过反射将struct转换成mapfuncStruct2map(obj any) (datamap[string]any, err error) { ...
b, _ := json.Marshal(map[string]int{"test":1,"try":2}) fmt.Println(string(b)) } AI代码助手复制代码 输出: 三、map和struct互转 (1)map转struct 需要安装一个第三方库 在命令行中运行: go get github.com/goinggo/mapstructure 例子: ...
beforeMap := map[string]interface {}{ "id":"123", "user_name":"酒窝猪", "address":[]map[string]interface{}{{"address": "address01"}, {"address": "address02"}}, } var afterStruct =UserInfoVo{} before := time.Now() marshal, err := json.Marshal(beforeMap) ...
先将map转换成JSON,再通过 JSON 转换成struct 操作有点繁琐 funcTestMapToStructByJson(t*testing.T){ beforeMap:=map[string]interface{}{ "id":"123", "user_name":"酒窝猪", "address":[]map[string]interface{}{{"address":"address01"},{"address":"address02"}}, ...
type Student struct { Person `mapstructure:",squash"` Age int } 未映射字段 若源数据中有未映射的值(即结构体中无对应的字段),mapstructure默认会忽略它。可以在结构体中定义一个特殊字段(类型为map[string]interface{},且标签要设置为mapstructure:",remain"),来存放所有未能映射的字段中。 1 2 3 4 5 ...
type Student struct { Num int Score int Age int Name string } studentMap := map[int]Student{ 1: {Num: 1, Name: "小明", Score: 3, Age: 26}, 2: {Num: 2, Name: "小红", Score: 4, Age: 27}, 3: {Num: 3, Name: "小李", Score: 5, Age: 24}, ...