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

Метод reflect.Value.CanSet

Метод CanSet проверяет, можно ли изменить значение, хранящееся в отражаемом значении reflect.Value. Он возвращает true, если значение является адресуемым и может быть изменено через соответствующие методы Set, SetInt, SetString и другие. В противном случае возвращается false.

Значение считается изменяемым, если оно получено из адресуемой переменной (например, через reflect.ValueOf(&x).Elem) и не является неэкспортируемым полем структуры. Для неадресуемых значений или констант метод вернет false.

Синтаксис

v.CanSet() bool

Пример 1

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

package main import ( "fmt" "reflect" ) func main() { x := 10 v := reflect.ValueOf(&x).Elem() fmt.Println(v.CanSet()) }

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

true

Пример 2

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

package main import ( "fmt" "reflect" ) func main() { x := 10 v := reflect.ValueOf(x) fmt.Println(v.CanSet()) }

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

false

Пример 3

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

package main import ( "fmt" "reflect" ) func main() { s := []int{1, 2, 3} v := reflect.ValueOf(&s).Elem().Index(0) fmt.Println(v.CanSet()) }

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

true

Пример 4

Давайте попробуем изменить значение, только если это возможно:

package main import ( "fmt" "reflect" ) func main() { x := 10 v := reflect.ValueOf(&x).Elem() if v.CanSet() { v.SetInt(20) } fmt.Println(x) }

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

20

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

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