Как определить, является ли объект составным (типом) или нет - PullRequest
0 голосов
/ 04 декабря 2018

Например, x interface{} дается.Как это можно определить (возможно, используя отражение), если это составной тип (структура или указатель на структуру) или «простой» тип, такой как string, int, float и т. Д.

1 Ответ

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

Вы можете использовать пакет 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...