如何使用reflect.Type与开关键入断言

时间:2018-12-24 12:43:27

标签: go struct types

我正在使用structs库来轻松地遍历结构的字段,例如:

package main

import "github.com/fatih/structs"

type T struct {
}

func main() {
  s := structs.New(T{})
  for _, field := range s.Fields() {
    switch field.Kind() {
    case bool:
      // do something
    case string:
      // do something
    }
  }
}

当前,由于field.Kind是reflect.Type,上面的代码不起作用。有可能使其以某种方式工作吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您将看到Kind()方法返回一个reflect.Kind,它是以下之一:

type Kind uint

const (
    Invalid Kind = iota
    Bool
    Int
    Int8
    Int16
    Int32
    Int64
    Uint
    Uint8
    Uint16
    Uint32
    Uint64
    Uintptr
    Float32
    Float64
    Complex64
    Complex128
    Array
    Chan
    Func
    Interface
    Map
    Ptr
    Slice
    String
    Struct
    UnsafePointer
)

因此,您需要使案例类似于reflect.Bool,而不是简单的bool

答案 1 :(得分:1)

使用预定义的反映种类常量:

for _, field := range s.Fields() {
    switch field.Kind() {
    case reflect.Bool:
      // do something
    case reflect.String:
      // do something
    }
  }
}