golang的反射问题

最近一直研究goland的反射,集合转换反射,转换后怎样使用?

集合转换反射之后,可以调用反射相关函数方法,常用操作如下:

package main

import (
	"fmt"
	"reflect"
)

func main() {
	// 定义集合
	m := make(map[string]string)
	m["name"] = "Tom"
	m["age"] = "100"
	// 转换反射集合变量
	mr := reflect.ValueOf(m)
	// 获取键值对数量
	fmt.Printf("Len()获取键值对数量:%v\n", mr.Len())
	// 获取集合所有的键
	mk := mr.MapKeys()
	fmt.Printf("MapKeys()获取键:%v,数据类型:%T\n", mk, mk)
	// 通过集合的键获取对应键值对
	mi := mr.MapIndex(mk[0])
	fmt.Printf("MapIndex()获取键值对:%v,数据类型:%T\n", mi, mi)
	// 修改某个键值对的值
	mi.CanSet()
	fmt.Printf("Set()修改某个键值对的值:%v,数据类型:%T\n", mi.CanSet(), mi.CanSet())
	// 获取集合的所有键值对
	iter := mr.MapRange()
	for iter.Next() {
		// 使用方法Next()输出所有键值对
		k := iter.Key()
		v := iter.Value()
		fmt.Printf("MapRange()获取集合的键:%v,集合的值:%v\n", k, v)
	}
	// 将反射集合变量转换接口变量,再由接口变量转换集合变量
	mm := mr.Interface().(map[string]string)
	fmt.Printf("反射转换集合:%v\n", mm["name"])
	// 添加新的键值对
	newKey := reflect.ValueOf("address")
	newValue := reflect.ValueOf("GuangZhou")
	mr.SetMapIndex(newKey, newValue)
	fmt.Printf("SetMapIndex()添加键值对:%v\n", mr)

	// 获取集合的数据类型
	mmm := reflect.TypeOf(m)
	// 根据反射变量mmm创建新的集合
	nmmm := reflect.MakeMap(mmm)
	// 添加新的键值对
	nmmm.SetMapIndex(newKey, newValue)
	fmt.Printf("MakeMap()创建新的集合:%v\n", nmmm)
}

如果对你有帮助,可以点击我这个回答右上方的【采纳】按钮,给我个采纳吗,谢谢

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632