qq_37912018
2021-06-05 12:47
采纳率: 100%
浏览 11

golang的反射问题

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • CSDN专家-黄老师 2021-06-05 12:48
    已采纳

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

    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)
    }
    

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 有问必答小助手 2021-06-07 15:48

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

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

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题