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

Функция reflect.PtrTo

Функция reflect.PtrTo принимает один аргумент - значение типа reflect.Type и возвращает новый тип, представляющий указатель на данный тип. Возвращаемый тип будет иметь reflect.Kind равный reflect.Ptr. Этот метод часто используется совместно с reflect.New для создания указателей на значения известных типов во время выполнения программы.

Синтаксис

func PtrTo(t Type) Type

В функцию передается тип t, для которого нужно получить указатель. Возвращается тип указателя на t.

Пример

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

package main import ( "fmt" "reflect" ) func main() { t := reflect.TypeOf(0) ptrType := reflect.PtrTo(t) fmt.Println(t.Kind()) fmt.Println(ptrType.Kind()) fmt.Println(ptrType) }

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

int ptr *int

Пример

Продемонстрируем использование reflect.PtrTo вместе с reflect.New для создания указателя на пользовательский тип структуры:

package main import ( "fmt" "reflect" ) type User struct { Name string Age int } func main() { userType := reflect.TypeOf(User{}) ptrType := reflect.PtrTo(userType) ptrValue := reflect.New(userType) fmt.Println(ptrType.Kind()) fmt.Println(ptrType.Elem().Kind()) fmt.Println(ptrValue.Type()) }

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

ptr struct *main.User

Пример

При помощи reflect.PtrTo можно создавать указатели на срезы, карты и другие составные типы:

package main import ( "fmt" "reflect" ) func main() { sliceType := reflect.TypeOf([]int{}) mapType := reflect.TypeOf(map[string]int{}) slicePtrType := reflect.PtrTo(sliceType) mapPtrType := reflect.PtrTo(mapType) fmt.Println(slicePtrType.Elem().Kind()) fmt.Println(mapPtrType.Elem().Kind()) fmt.Println(slicePtrType) fmt.Println(mapPtrType) }

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

slice map *[]int *map[string]int

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

  • функцию reflect.TypeOf,
    которая возвращает тип переданного значения
  • функцию reflect.New,
    которая создает новое значение типа-указателя
  • функцию reflect.ValueOf,
    которая возвращает значение интерфейса как значение отражающего типа
  • функцию reflect.Type.Elem,
    которая возвращает базовый тип элемента для указателей, срезов, массивов и карт
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить