🟡 Средний · 2 очк. Рефлексия
Почему reflect.Value.CanSet() возвращает false, если в reflect.ValueOf передали не указатель?
A ValueOf копирует значение; рефлексия может менять только то, на что указывает переданный адрес
B Это баг в стандартной библиотеке
C CanSet всегда false для структур
D Нужно передавать только указатели по правилам Go
Объяснение вопроса

В Go аргументы передаются по значению. ValueOf(x) получает копию. Изменение копии бессмысленно, поэтому CanSet() возвращает false.

var n int = 10
v := reflect.ValueOf(n)
fmt.Println(v.CanSet())  // false

vp := reflect.ValueOf(&n)
ve := vp.Elem()
fmt.Println(ve.CanSet())  // true
ve.SetInt(20)
fmt.Println(n)  // 20
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.