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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探