我正在做一个函数,它将任意变量类型从一个变量参数解包成如下变量:
package main
import (
"fmt"
)
func unpackVariadic(variadic []interface{}, into ...*interface{}) {
for i, v := range into {
*v = variadic[i]
}
}
func Update(variadic ...interface{}) {
var a, b interface{}
unpackVariadic(variadic, &a, &b)
a = "Hey"
b = "Hello"
}
func main() {
a, b := "Hola", "Hola"
Update(&a, &b)
fmt.Println(a)
fmt.Println(b)
}
然而,它正在打印
"Hola", "Hola"
而不是
"Hey", "Hello"
我想怎样。
我的理解是
a
和
b
在里面
Update()
和
main()
具有不同的参考值,意味着从内部重新分配
更新()
将仅在本地分配
一
和
b
从原始地址
一
b
新字符串的值。
为了解决这个问题,我尝试重新分配
一
和
b
通过其对象指针:
func Update(variadic ...interface{}) {
var a, b *interface{}
unpackVariadic(variadic, a, b)
*a = "Hey"
*b = "Hello"
}
但是,当我这么做的时候
invalid operation: cannot indirect a (variable of type interface{})
.
那么,为什么我不能在
更新()
虽然我可以进去
unpackVariadic
? 我该怎么做才能有所不同呢?