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

Функция reflect.New

Функция reflect.New создает новый объект переданного типа и возвращает значение типа reflect.Value, которое представляет указатель на этот новый объект. В единственный параметр функция принимает объект типа reflect.Type, который определяет тип создаваемого объекта. Возвращаемое значение указывает на нулевое значение переданного типа, но в отличие от reflect.Zero, возвращает именно указатель, который можно использовать для изменения значения.

Синтаксис

reflect.New(typ)

Пример ⁅n="sect"⁆

Давайте создадим новый указатель на целое число и установим его значение:

package main import ( "fmt" "reflect" ) func main() { var num int typ := reflect.TypeOf(num) ptr := reflect.New(typ) ptr.Elem().SetInt(42) res := ptr.Elem().Interface() fmt.Println(res) }

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

42

Пример ⁅n="sect"⁆

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

package main import ( "fmt" "reflect" ) func main() { typ := reflect.TypeOf("") ptr := reflect.New(typ) ptr.Elem().SetString("Hello, World!") res := ptr.Elem().Interface() fmt.Println(res) }

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

"Hello, World!"

Пример ⁅n="sect"⁆

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

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { typ := reflect.TypeOf(Person{}) ptr := reflect.New(typ) elem := ptr.Elem() elem.FieldByName("Name").SetString("Alice") elem.FieldByName("Age").SetInt(30) res := elem.Interface() fmt.Println(res) }

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

{Alice 30}

Пример ⁅n="sect"⁆

Давайте создадим указатель на срез и добавим в него элементы:

package main import ( "fmt" "reflect" ) func main() { typ := reflect.TypeOf([]int{}) ptr := reflect.New(typ) elem := ptr.Elem() elem.Set(reflect.Append(elem, reflect.ValueOf(1))) elem.Set(reflect.Append(elem, reflect.ValueOf(2))) elem.Set(reflect.Append(elem, reflect.ValueOf(3))) res := elem.Interface() fmt.Println(res) }

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

[1 2 3]

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

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