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 

你可能感兴趣的:(go,golang)