2017-02-06 6 views
0

Пусть у меня есть 2 Структуры:Как определить тип является структурой в Golang

type Base struct { 
id int 
name string 
} 

type Extended struct { 
Base 
Email string 
Password string 
} 

И я хочу, чтобы отразить Расширенную-структуру, чтобы получить это поле:

e := Extended{} 
e.Email = "[email protected]" 
e.Password = "secret" 

for i := 0 ; i < reflect.TypeOf(e).NumField() ; i++ { 
    if reflect.TypeOf(e).Field(i) != "struct" { << how to do this validation? 
    fmt.Println(reflect.ValueOf(e).Field(i)) 
    } 
} 
+1

См. http://stackoverflow.com/help/how-to-ask для quidlines о том, как задать хороший вопрос. Ваше сообщение на самом деле не задает вопрос. – PaulNUK

ответ

3

Просто проверьте Kind() значения

if reflect.ValueOf(e).Field(i).Kind() != reflect.Struct { 
    fmt.Println(reflect.ValueOf(e).Field(i)) 
} 
+0

На самом деле это должно быть: reflect.ValueOf (e) .Field (i) .Type.Kind() вы пропускаете вызов .Type после вызова func Поле (i) Спасибо, в любом случае, я решил его из-за ваш указатель –

+0

Кажется, что тип не является обязательным. Значение имеет вид Kind() самостоятельно. – Uvelichitel