Вы можете использовать пакет reflect
, получить его тип и проверить его kind .Если это тип указателя, «перейдите» к указанному типу:
func isStruct(i interface{}) bool {
t := reflect.TypeOf(i)
if t.Kind() == reflect.Ptr {
t = t.Elem()
}
return t.Kind() == reflect.Struct
}
Тестирование:
fmt.Println(isStruct("text"))
fmt.Println(isStruct(1))
fmt.Println(isStruct(image.Point{}))
fmt.Println(isStruct(&image.Point{}))
Вывод (попробуйте на Go Playground ):
false
false
true
true