问题描述:
args[0] = ...
更新 args[0]
:
package main
import "fmt"
func MyFunc(lambda any) {
myVars := []any {0}
for i := 0; i < 30; i++ {
lambda.(func(...any))(myVars...)
fmt.Println(myVars[0]) // 0, 2, 4, ..., 60 (good)
}
}
func main() {
MyFunc(func(args ...any) {
args[0] = args[0].(int) + 2
})
}
但是当我创建变量 v := args[0]
并尝试通过执行 v = ... 来更新
,Go(可以理解)将 args[0]
的值时v
重新分配给一个新对象,而不是更新 args[0]
的值:
package main
import "fmt"
func MyFunc(lambda any) {
myVars := []any {0}
for i := 0; i < 30; i++ {
lambda.(func(...any))(myVars...)
fmt.Println(myVars[0]) // 0, 0, 0, ..., 0 (bad)
}
}
func main() {
MyFunc(func(args ...any) {
v := args[0]
v = v.(int) + 2
})
}
我的问题:
如何使用 v
更新 args[0]
?任何帮助将不胜感激。
我尝试过的事情:
我无法执行*v = ...
,因为这会产生编译器错误“无效操作:无法间接 v(任何类型的变量)”
。
我不能这样做 v := args[0].(*int); *v = *v + 2;
,因为这会产生运行时错误“ panic :接口(interface)转换:接口(interface) {} 是 int,而不是 *int”
。
最佳答案
您没有正确执行指针操作。类型断言指针变量v
。首先使用 &
获取 arg 值的地址,然后继续执行其余逻辑。
func main() {
MyFunc(func(args ...any) {
v := &args[0]
*v = (*v).(int) + 2
})
}
关于go - 如何将接口(interface)变量分配给另一个接口(interface)变量存储的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73564570/