小编sma*_*man的帖子

如何使用Golang Reflection获取作为切片的struct字段的类型?

我正在尝试使用反射来构建一个例程,该例程将列出传入的任意结构中的所有字段的名称,种类和类型.这是我到目前为止所得到的:

type StatusVal int
type Foo struct {
    Name string
    Age  int
}
type Bar struct {
    Status StatusVal
    FSlice []Foo
}

func ListFields(a interface{}) {
    v := reflect.ValueOf(a).Elem()
    for j := 0; j < v.NumField(); j++ {
        f := v.Field(j)
        n := v.Type().Field(j).Name
        t := f.Type().Name()
        fmt.Printf("Name: %s  Kind: %s  Type: %s\n", n, f.Kind(), t)
    }
}

func main() {
    var x Bar
    ListFields(&x)
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

Name: Status  Kind: int  Type: StatusVal
Name: FSlice  Kind: slice  Type: 
Run Code Online (Sandbox Code Playgroud)

当字段是切片时,类型为空.我尝试了几种方法来获取切片的数据类型,但所有尝试都导致了恐慌......通常是这样的:

reflect: …
Run Code Online (Sandbox Code Playgroud)

reflection struct types go slice

8
推荐指数
1
解决办法
5092
查看次数

标签 统计

go ×1

reflection ×1

slice ×1

struct ×1

types ×1