Вы не можете с вашим текущим кодом.Указатель a
передается (как будто) по значению, даже если он обернут в интерфейс, и нет никакой возможности обнулить оригинальную копию.Это то же самое, что и случай, когда a
- это тип без указателя (например, int
);нет функции f
, которая может изменить значение a
в коде a := 42; 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()))
}