Метод reflect.Value.Type

Метод reflect.Value.Type возвращает reflect.Type, представляющий динамический тип значения, хранящегося в reflect.Value. Этот метод полезен, когда вам нужно получить информацию о типе переменной во время выполнения программы, например, имя типа, категорию (kind) или другие свойства типа.

Синтаксис

gofunc (v Value) Type() Type

Пример

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

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  num := 42
  val := reflect.ValueOf(num)
  typ := val.Type()

  fmt.Println(typ)
  fmt.Println(typ.Name())
  fmt.Println(typ.Kind())
}

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

go"int"
"int"
"int"

Пример

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

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  str := "Hello World"
  val := reflect.ValueOf(str)
  typ := val.Type()

  fmt.Println(typ)
  fmt.Println(typ.Name())
  fmt.Println(typ.Kind())
}

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

go"string"
"string"
"string"

Пример

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

gopackage main

import (
  "fmt"
  "reflect"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  p := Person{Name: "Alice", Age: 30}
  val := reflect.ValueOf(p)
  typ := val.Type()

  fmt.Println(typ)
  fmt.Println(typ.Name())
  fmt.Println(typ.Kind())
}

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

go"main.Person"
"Person"
"struct"

Пример

Метод Type также работает с указателями:

gopackage main

import (
  "fmt"
  "reflect"
)

type Person struct {
  Name string
  Age  int
}

func main() {
  p := &Person{Name: "Bob", Age: 25}
  val := reflect.ValueOf(p)
  typ := val.Type()

  fmt.Println(typ)
  fmt.Println(typ.Name())
  fmt.Println(typ.Kind())

  // Получаем тип элемента указателя
  elemType := typ.Elem()
  fmt.Println(elemType)
  fmt.Println(elemType.Name())
}

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

go"*main.Person"
""
"ptr"
"main.Person"
"Person"

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

  • функцию reflect.TypeOf,
    которая возвращает тип переменной без создания reflect.Value
  • функцию reflect.ValueOf,
    которая создает reflect.Value из переменной
  • метод reflect.Value.Kind,
    который возвращает категорию типа значения
  • метод reflect.Type.Kind,
    который возвращает категорию типа