Как печатать assert с помощью switch, используя отражатель - PullRequest
0 голосов
/ 24 декабря 2018

Я использую библиотеку 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является отражением. Тип.Можно ли как-нибудь заставить его работать?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Использование предопределенных констант вида:

for _, field := range s.Fields() {
    switch field.Kind() {
    case reflect.Bool:
      // do something
    case reflect.String:
      // do something
    }
  }
}
0 голосов
/ 24 декабря 2018

Вы увидите, что метод 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...