Метод reflect.Type.Key

Метод reflect.Type.Key возвращает тип ключа для типа map. Этот метод полезен при работе с отражением, когда необходимо динамически определить тип ключа карты. Если вызвать метод на типе, который не является map, метод вернет nil. Метод принимает нуль параметров и возвращает значение типа reflect.Type.

Синтаксис

gofunc (t Type) Key() Type

Пример

Давайте получим тип ключа для map с ключами типа string:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var m map[string]int
  t := reflect.TypeOf(m)
  keyType := t.Key()
  fmt.Println(keyType)
}

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

go"string"

Пример

Получим тип ключа для map с ключами типа int:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var m map[int]bool
  t := reflect.TypeOf(m)
  keyType := t.Key()
  fmt.Println(keyType)
}

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

go"int"

Пример

Попробуем вызвать метод на типе, который не является map:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var s []int
  t := reflect.TypeOf(s)
  keyType := t.Key()
  if keyType == nil {
    fmt.Println("keyType is nil")
  }
}

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

go"keyType is nil"

Пример

Используем метод Key вместе с методом Kind для проверки типа ключа:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var m map[string]float64
  t := reflect.TypeOf(m)
  keyType := t.Key()
  if keyType.Kind() == reflect.String {
    fmt.Println("Key type is string")
  }
}

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

go"Key type is string"

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

  • метод reflect.Type.Elem,
    который возвращает тип элемента для slice, array, ptr, chan или map
  • функцию reflect.TypeOf,
    которая возвращает тип переданного значения
  • метод reflect.Type.Kind,
    который возвращает категорию типа
  • метод reflect.Value.MapIndex,
    который возвращает значение элемента map по ключу