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

Метод reflect.Type.Elem

Метод reflect.Type.Elem возвращает тип элемента составного типа. В первый параметр метод не принимает аргументов и вызывается непосредственно на объекте типа reflect.Type. Он применяется к типам-контейнерам: указателям (*T), массивам ([N]T), срезам ([]T), каналам (chan T) и картам (map[K]V), где возвращается тип значения. Для карт метод возвращает тип значения, а не тип ключа.

Синтаксис

typeOf.Elem()

Пример

Давайте получим тип элемента для среза строк:

package main import ( "fmt" "reflect" ) func main() { slice := []string{"a", "b", "c", "d", "e"} typeOf := reflect.TypeOf(slice) elemType := typeOf.Elem() fmt.Println(elemType) }

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

string

Пример

Давайте получим тип элемента для указателя на структуру:

package main import ( "fmt" "reflect" ) type User struct { Name string Age int } func main() { ptr := &User{} typeOf := reflect.TypeOf(ptr) elemType := typeOf.Elem() fmt.Println(elemType) }

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

main.User

Пример

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

package main import ( "fmt" "reflect" ) func main() { m := map[int]bool{1: true, 2: false} typeOf := reflect.TypeOf(m) elemType := typeOf.Elem() fmt.Println(elemType) }

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

bool

Пример

Давайте получим тип элемента для канала:

package main import ( "fmt" "reflect" ) func main() { ch := make(chan int, 5) typeOf := reflect.TypeOf(ch) elemType := typeOf.Elem() fmt.Println(elemType) }

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

int

Пример

Давайте обработаем случай, когда метод Elem вызывается на типе, не являющемся составным:

package main import ( "fmt" "reflect" ) func main() { num := 42 typeOf := reflect.TypeOf(num) defer func() { if r := recover(); r != nil { fmt.Println("panic:", r) } }() elemType := typeOf.Elem() fmt.Println(elemType) }

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

"panic: reflect: Elem of invalid type"

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

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