Функция reflect.TypeOf

Функция reflect.TypeOf позволяет получить информацию о типе переменной во время выполнения программы. Она принимает один параметр - интерфейсную переменную любого типа, а возвращает объект reflect.Type, который содержит полную информацию о типе переданного значения. Эта функция является точкой входа в мир рефлексии в Go.

Синтаксис

goreflect.TypeOf(i interface{}) reflect.Type

Пример "sect"

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

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  res := reflect.TypeOf("abcde")
  fmt.Println(res)
}

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

go"string"

Пример "sect"

Получим тип целого числа:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  res := reflect.TypeOf(42)
  fmt.Println(res)
}

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

go"int"

Пример "sect"

Получим тип слайса строк:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  res := reflect.TypeOf([]string{"a", "b", "c", "d", "e"})
  fmt.Println(res)
}

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

go"[]string"

Пример "sect"

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

gopackage main

import (
  "fmt"
  "reflect"
)

type User struct {
  Name string
  Age  int
}

func main() {
  user := User{Name: "John", Age: 30}
  res := reflect.TypeOf(user)
  fmt.Println(res)
}

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

go"main.User"

Пример "sect"

Получим тип указателя на строку:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  str := "abcde"
  ptr := &str
  res := reflect.TypeOf(ptr)
  fmt.Println(res)
}

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

go"*string"

Пример "sect"

Получим тип нулевого значения интерфейса:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var i interface{}
  res := reflect.TypeOf(i)
  fmt.Println(res)
}

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

go"<nil>"

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

  • функцию reflect.ValueOf,
    которая возвращает значение переменной в виде объекта reflect.Value
  • метод reflect.Type.Kind,
    который возвращает базовый тип (Kind) значения
  • метод reflect.Type.Name,
    который возвращает имя типа
  • метод reflect.Type.Elem,
    который возвращает тип элемента для составных типов