РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1500 of 1593 menu

Метод reflect.Value.Kind

Метод reflect.Value.Kind возвращает базовый вид (kind) значения, представленного объектом reflect.Value. В отличие от метода Type, который возвращает полную информацию о типе, Kind определяет только фундаментальную категорию значения, такую как Int, String, Struct, Slice или Ptr. Результат возвращается в виде константы типа reflect.Kind.

Синтаксис

v.Kind() reflect.Kind

Пример

Давайте получим вид значения для различных типов данных:

package main import ( "fmt" "reflect" ) func main() { var ( num int = 10 str string = "abcde" sl []int = []int{1, 2, 3, 4, 5} person struct{ Name string } ) fmt.Println(reflect.ValueOf(num).Kind()) fmt.Println(reflect.ValueOf(str).Kind()) fmt.Println(reflect.ValueOf(sl).Kind()) fmt.Println(reflect.ValueOf(person).Kind()) }

Результат выполнения кода:

int string slice struct

Пример

Метод Kind позволяет отличить указатель от значения, на которое он ссылается:

package main import ( "fmt" "reflect" ) func main() { num := 42 ptr := &num v1 := reflect.ValueOf(num) v2 := reflect.ValueOf(ptr) fmt.Println(v1.Kind()) fmt.Println(v2.Kind()) }

Результат выполнения кода:

int ptr

Пример

С помощью Kind можно построить гибкую логику обработки значений разных типов в одной функции:

package main import ( "fmt" "reflect" ) func inspect(v interface{}) { val := reflect.ValueOf(v) switch val.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: fmt.Printf("Integer: %d\n", val.Int()) case reflect.String: fmt.Printf("String: %s\n", val.String()) case reflect.Slice: fmt.Printf("Slice length: %d\n", val.Len()) default: fmt.Printf("Other kind: %s\n", val.Kind()) } } func main() { inspect(100) inspect("abcde") inspect([]int{1, 2, 3, 4, 5}) inspect(3.14) }

Результат выполнения кода:

Integer: 100 String: abcde Slice length: 5 Other kind: float64

Смотрите также

  • метод reflect.Value.Type,
    который возвращает полную информацию о типе значения
  • метод reflect.Type.Kind,
    который получает вид значения из типа без создания экземпляра
  • метод reflect.Value.Interface,
    который извлекает исходное значение из reflect.Value
  • метод reflect.Value.IsValid,
    который проверяет, содержит ли reflect.Value корректное значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить