Возможно ли использовать отражение в golang, чтобы получить базовый тип определенного пользователем типа? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть этот тип:

type T string

Могу ли я получить базовый тип объекта T? Например:

package main

import (
    "fmt"
    "reflect"
)

type T string

func main() {
    var t = T("what")
    tt := reflect.TypeOf(t)
    fmt.Println(tt) // prints T, i need string
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Не совсем "базовый тип", но для вашего случая вы этого не хотите, вам нужно его Kind от Type.Kind():

var t = T("what")
k := reflect.TypeOf(t).Kind()
fmt.Println(k)

Пример воспроизведения: https://play.golang.org/p/M75wsTwUHkv

Обратите внимание, что Kind не является синонимом "базового типа", что на самом деле не вещь, как вы можете видеть здесь: https://play.golang.org/p/900YGm2BnPV

0 голосов
/ 01 ноября 2018

Вы можете вызвать Type.Kind () , который вернет вам одну из этих констант

fmt.Println(tt.Kind()) // prints string

Если вы не знаете, указатель это или нет, вам нужна дополнительная проверка и вызовите Type.Elem ()

var kind reflect.Kind 
if tt.Kind() == reflect.Ptr {
    kind = tt.Elem().Kind()
} else {
    kind = tt.Kind()
}
fmt.Println(kind)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...