go之reflect的一些例子

记录反射的一些小例子

package main

import "fmt"
import "strconv"
import "reflect"
/*
func showMapData(contentData interface{}) {
    data := contentData.(reflect.TypeOf(contentData))
    for key, val := range data {
        fmt.Printf("%s:%d \n", key, len(val))
    }
}
*/
func main() {
    var listInt []int = []int{1,2,3,4,5,6,1,1,2,2,5,6}
    var mapExcel map[string][]int
    mapExcel = make(map[string][]int)
    for _, val := range listInt {
        key := strconv.Itoa(val)
        _, ok := mapExcel[key]
        if !ok {
            fmt.Print("不存在,需要添加 \n")    
        }
        mapExcel[key] = append(mapExcel[key], val)
    }
    for key, val := range mapExcel {
        fmt.Printf("%s:%d \n", key, len(val))
    }
    contentDataType := reflect.TypeOf(mapExcel)
    fmt.Println(contentDataType);
    structType1 := contentDataType.Elem()
    fmt.Println(structType1);
    structType2 := structType1.Elem()
    fmt.Println(structType2);
    fmt.Println(len(mapExcel));
    //showMapData(mapExcel)
    valueOfContent := reflect.ValueOf(mapExcel)
    fmt.Println("=================================================")
    fmt.Println(valueOfContent.Len())
    for _, key := range valueOfContent.MapKeys() {
        fmt.Printf("key = %s \n", key.Interface().(string))
        fmt.Println(valueOfContent.MapIndex(key).Len())
    }
    for i, val := range listInt[1:] {
        fmt.Printf("i = %d, val = %d \n", i, val)
    }
    
}

结果:

不存在,需要添加 
不存在,需要添加 
不存在,需要添加 
不存在,需要添加 
不存在,需要添加 
不存在,需要添加 
1:3 
2:3 
3:1 
4:1 
5:2 
6:2 
map[string][]int
[]int
int
6
=================================================
6
key = 1 
3
key = 2 
3
key = 3 
1
key = 4 
1
key = 5 
2
key = 6 
2
i = 0, val = 2 
i = 1, val = 3 
i = 2, val = 4 
i = 3, val = 5 
i = 4, val = 6 
i = 5, val = 1 
i = 6, val = 1 
i = 7, val = 2 
i = 8, val = 2 
i = 9, val = 5 
i = 10, val = 6 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值