Константа reflect.Ptr

Константа reflect.Ptr представляет собой значение типа reflect.Kind, используемое для обозначения указателей в системе типов Go. Она является одной из констант, определяющих конкретный вид типа данных при работе с рефлексией. В первом параметре функция reflect.TypeOf возвращает тип, у которого можно получить Kind, и если этот Kind равен reflect.Ptr, значит, мы имеем дело с указателем.

Синтаксис

goconst Ptr = 22

Константа используется для сравнения с результатом метода Kind у значения reflect.Type или reflect.Value.

Пример

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

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var num int = 42
  var ptr *int = &num

  t := reflect.TypeOf(ptr)
  if t.Kind() == reflect.Ptr {
    fmt.Println("Type is a pointer")
  }
}

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

go"Type is a pointer"

Пример

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

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var str string = "hello"

  t := reflect.TypeOf(str)
  if t.Kind() == reflect.Ptr {
    fmt.Println("Type is a pointer")
  } else {
    fmt.Println("Type is not a pointer")
  }
}

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

go"Type is not a pointer"

Пример

Использование reflect.Ptr для получения базового типа указателя:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var num int = 42
  var ptr *int = &num

  t := reflect.TypeOf(ptr)
  if t.Kind() == reflect.Ptr {
    elemType := t.Elem()
    fmt.Printf("Pointer to: %s\n", elemType.Kind())
  }
}

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

go"Pointer to: int"

Пример

Проверка значения через reflect.Value:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var num int = 42
  var ptr *int = &num

  v := reflect.ValueOf(ptr)
  if v.Kind() == reflect.Ptr {
    fmt.Println("Value is a pointer")
    fmt.Printf("Pointed value: %v\n", v.Elem().Interface())
  }
}

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

go"Value is a pointer"
"Pointed value: 42"

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

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