Константа reflect.Ptr
Константа reflect.Ptr представляет собой значение типа reflect.Kind,
используемое для обозначения указателей в системе типов Go. Она является
одной из констант, определяющих конкретный вид типа данных при работе
с рефлексией. В первом параметре функция reflect.TypeOf возвращает
тип, у которого можно получить Kind, и если этот Kind равен
reflect.Ptr, значит, мы имеем дело с указателем.
Синтаксис
const Ptr = 22
Константа используется для сравнения с результатом метода Kind
у значения reflect.Type или reflect.Value.
Пример
Давайте проверим, является ли тип переменной указателем:
package 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")
}
}
Результат выполнения кода:
"Type is a pointer"
Пример
Проверим тип для не-указателя, чтобы увидеть, что условие не срабатывает:
package 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")
}
}
Результат выполнения кода:
"Type is not a pointer"
Пример
Использование reflect.Ptr для получения базового типа указателя:
package 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())
}
}
Результат выполнения кода:
"Pointer to: int"
Пример
Проверка значения через reflect.Value:
package 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())
}
}
Результат выполнения кода:
"Value is a pointer"
"Pointed value: 42"
Смотрите также
-
функцию
reflect.Kind,
которая представляет собой тип для хранения категории типа -
функцию
reflect.TypeOf,
которая возвращает тип переменной -
функцию
reflect.ValueOf,
которая возвращает значение переменной в видеreflect.Value -
функцию
reflect.Type.Elem,
которая возвращает базовый тип указателя