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

Метод reflect.Value.Set

Метод Set объекта reflect.Value устанавливает новое значение для переменной, на которую указывает приемник. В качестве аргумента метод принимает другое значение reflect.Value, которое должно быть присваиваемо типу исходного значения. Важно помнить, что метод Set работает только с адресуемыми значениями, то есть теми, которые можно изменить. Проверить адресуемость можно с помощью метода CanSet.

Метод вызывает панику, если значение не адресуемо или если типы передаваемого значения и приемника не совместимы для присваивания. Для корректной работы необходимо, чтобы передаваемое значение было того же типа, что и приемник, либо могло быть преобразовано к нему.

Синтаксис

func (v Value) Set(x Value)

Пример

Давайте изменим значение переменной типа string с помощью отражения:

package main import ( "fmt" "reflect" ) func main() { var s string = "abcde" val := reflect.ValueOf(&s).Elem() if val.CanSet() { newVal := reflect.ValueOf("12345") val.Set(newVal) } fmt.Println(s) }

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

"12345"

Пример

Теперь изменим значение целочисленной переменной:

package main import ( "fmt" "reflect" ) func main() { var num int = 10 val := reflect.ValueOf(&num).Elem() if val.CanSet() { newVal := reflect.ValueOf(42) val.Set(newVal) } fmt.Println(num) }

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

42

Пример

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

package main import ( "fmt" "reflect" ) func main() { var s string = "abcde" val := reflect.ValueOf(s) if val.CanSet() { newVal := reflect.ValueOf("12345") val.Set(newVal) } else { fmt.Println("value is not settable") } }

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

"value is not settable"

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

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