gpt4 book ai didi

go - 是否可以更改存储在空接口(interface)中的结构的成员

转载 作者:数据小太阳 更新时间:2023-10-29 03:47:24 27 4
gpt4 key购买 nike

我有这个:

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

有什么方法可以修改 y 中复制的结构的 pair.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)

更新:

我不会使用 y 来改变 x.b。我想单独更改 y 的字段 b

感谢您的帮助,但这不是一个关于值和引用的简单问题。

最佳答案

首先需要知道指针和地址。使用指针可以深度改变值。如果你想让y和x有相同的值,它们需要指向相同的地址。

关于go - 是否可以更改存储在空接口(interface)中的结构的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53094318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com