У меня есть это:
type pair struct {
a, b int
}
Затем я определяю две переменные:
x := pair{ 3, 4 }
var y interface{} = x
Я понимаю, что y
хранит не ссылку x
, а копию этого кода:
x.b = 7
fmt.Println(x)
fmt.Println(y)
// got:
// {3 7}
// {3 4}
Также см .: https://github.com/golang/go/blob/master/src/runtime/iface.go#L359
Есть ли способ изменить pair.y
член скопированной структуры в y?
Попробовал это: (не удалось)
// cannot assign to y.(pair).b
y.(pair).b = 7
Попробовал это: (также не удалось)
// panic: reflect: reflect.Value.SetInt using value obtained using unexported field
v := reflect.ValueOf(y).FieldByName("b")
v.SetInt(33)
Измените "b" на "B": (также не работает)
type pair {
a, B int
}
// panic: reflect: reflect.Value.SetInt using unaddressable value
v := reflect.ValueOf(y).FieldByName("B")
v.SetInt(33)
Обновление:
Я не собираюсь менять x.b
, используя y. Я хочу изменить y
поле b
в одиночку.
Спасибо за вашу помощь, но это не простой вопрос о ценностях и ссылках.