记录反射的一些小例子
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