如何通过Golang中的函数传递接口指针?
我在测试golang功能时,遇到了这个概念,我可以使用接口指针作为接口本身。在下面的代码中,如何确保如何通过Golang中的函数传递接口指针?,go,interface,Go,Interface,我在测试golang功能时,遇到了这个概念,我可以使用接口指针作为接口本身。在下面的代码中,如何确保one的值更改为random package main import ( "fmt" ) func some(check interface{}) { check = "random" } func main() { var one *interface{} some(one) fmt.Println(one) } 具体来说,我需要一种方法,可以将接
one
的值更改为random
package main
import (
"fmt"
)
func some(check interface{}) {
check = "random"
}
func main() {
var one *interface{}
some(one)
fmt.Println(one)
}
具体来说,我需要一种方法,可以将接口指针传递给接受接口作为参数的函数
谢谢
接口{}
的指针作为some
one
的地址传递给some
some
的相同签名,则必须使用reflect
包设置接口{}
指针值:
package main
import (
"fmt"
"reflect"
)
func some(check interface{}) {
val := reflect.ValueOf(check)
if val.Kind() != reflect.Ptr {
panic("some: check must be a pointer")
}
val.Elem().Set(reflect.ValueOf("random"))
}
func main() {
var one interface{}
some(&one)
fmt.Println(one)
}
注意:
val.Elem().Set()
如果传递的值不可分配给check
的指向类型,则val.Elem().Set()将死机。我们可以在不更改some
函数的参数类型的情况下做些什么吗?@re3el这与您的问题相反asked@re3el:更新的答案。而不是val.Kind()!=reflect.Ptr,可以使用val.CanSet()
package main
import (
"fmt"
"reflect"
)
func some(check interface{}) {
val := reflect.ValueOf(check)
if val.Kind() != reflect.Ptr {
panic("some: check must be a pointer")
}
val.Elem().Set(reflect.ValueOf("random"))
}
func main() {
var one interface{}
some(&one)
fmt.Println(one)
}