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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?