Golang 中国

xialeistudio

Golang China 第 8479 号会员,加入于 2018-04-14 22:51


xialeistudio最近创建的主题


xialeistudio最近回复了


回复了 zhengyixiao 创建的主题: 萌新在学习反射的时候碰到一个问题,还请大神指点 2018-10-16 16:40
package main

import (
    "reflect"
    "fmt"
)

type T struct {
    A int
    B string
}

func main() {
    t := T{23, "哈哈"}
    PrintAny(&t)
}

func PrintAny(o interface{}) {
    elemType := reflect.TypeOf(o).Elem()
    elemValue := reflect.ValueOf(o).Elem()
    for i := 0; i < elemType.NumField(); i++ {
        fmt.Println(elemValue.Field(i).Interface())
    }
}

需要区分类型(typeof)和值(valueof),此外需要使用指针

回复了 myxingke 创建的主题: 请教GO二维数组的json字符串如何转成map 或切片 2018-04-14 22:56
package main

import (
    "os"
    "log"
    "encoding/json"
    "fmt"
)

func main() {
    fp, err := os.Open("a.json")
    if err != nil {
        log.Fatal(err)
    }
    defer fp.Close()
    list := make([]interface{}, 0)
    if err := json.NewDecoder(fp).Decode(&list); err != nil {
        log.Fatal(err)
    }
    for _, item := range list {
        sublist, ok := item.([]interface{})
        if !ok {
            continue
        }
        for _, subitem := range sublist {
            mapData, ok := subitem.(map[string]interface{})
            if !ok {
                continue
            }
            a, ok := mapData["a"]
            if !ok {
                continue
            }
            fmt.Println(a.(float64))
            b, ok := mapData["b"]
            if !ok {
                continue
            }
            fmt.Println(b.(float64))
        }
    }
}
xialeistudio 创建的更多回复