Проверка типов срезов в golang

#go

#Вперед

Вопрос:

Я использую пакет reflect для проверки типа моих переменных. Например, если я хочу проверить, является ли var целым числом, я делаю:

 reflect.TypeOf(var).Kind == reflect.Int
  

Как я могу проверить, является ли моя переменная срезом int или float?

Я вижу Slice только как один из типов, возвращаемых Kind(), но этот фрагмент может быть любого типа

Ответ №1:

Если тип является срезом, Elem() будет возвращен базовый тип:

 func main() {
    foo := []int{1,2,3}
    fmt.Println(reflect.TypeOf(foo).Elem()) //prints "int"
    fmt.Println(reflect.TypeOf(foo).Elem().Kind() == reflect.Int) //true!
}
  

Конечно, вам лучше проверить, что это фрагмент, прежде чем.