Golang Отражение: проверка определения типа структуры для извлечения его свойств без инициализации - PullRequest
0 голосов
/ 05 апреля 2020

Если у меня есть следующая декларация

type Foo struct {
   bar string
}

Могу ли я использовать отражение для проверки свойств в объявлении без его инициализации?

keys := reflect.something(Foo)

for _, key := range keys {
    fmt.Println(key) // "bar"
}

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

Используйте рефлект. тип указателя и «разыменование» этого типа.

t := reflect.TypeOf((*Foo)(nil)).Elem()

Выражение (*Foo)(nil) возвращает нулевой указатель на тип. Метод Type.Elem возвращает указанный тип.

Итерация по полям типа. Type.NumField возвращает количество полей в типе. Type.Field возвращает StructField по индексу поля.

for i := 0; i < t.NumField; i++ {
    fmt.Println(t.Field(i).Name)
}

Запустите его на детской площадке .

0 голосов
/ 05 апреля 2020

Foo является типом типа Stuct, поэтому вы не можете проверить TypeOf тип.

Используя reflect.TypeOf(), вы можете проверить тип переменной во время выполнения.

Но вы можете получить указатель TypeOf типа Foo, создав нулевой указатель во время выполнения, как ответ @iLoveReflection.

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