gpt4 book ai didi

go - 在 Golang 中使用 reflect 将指向通过 interface{} 传入的结构的指针设置为 nil?

转载 作者:IT王子 更新时间:2023-10-29 01:23:08 26 4
gpt4 key购买 nike

我正在尝试使用 reflect 将指向结构的指针设置为 nil 通过 Go 中的 interface{} 传入。

我有这个示例程序,但它总是打印错误,因为 a 未设置为 nil。我做错了什么?

package main

import "reflect"

type MyStruct struct {}

func main() {

a := &MyStruct{}

wipePassed(a)
println(a == nil)

}

func wipePassed(r interface{}){
v := reflect.ValueOf(&r)
p := v.Elem()
p.Set(reflect.Zero(p.Type()))
}

最佳答案

您不能使用当前代码。指针 a 被(好像)按值传递,即使它被包装在一个接口(interface)中,并且没有办法将原始副本归零。这与 a 是非指针类型(例如 int)的情况相同;在代码 a := 42; 中没有函数 f 可以改变 a 的值; f(a) -- 你必须传递一个指针。

如果你传入指针a的地址,你的代码就可以工作:

package main

import "reflect"

type MyStruct struct{}

func main() {
a := &MyStruct{}
wipePassed(&a)
println(a == nil)
}

func wipePassed(r interface{}) {
v := reflect.ValueOf(r)
p := v.Elem()
p.Set(reflect.Zero(p.Type()))
}

关于go - 在 Golang 中使用 reflect 将指向通过 interface{} 传入的结构的指针设置为 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504986/

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