我想在 Go 中调用一个函数,在方法值上使用reflect.Value.Call,并将 nil 作为参数传递。有关说明,请参阅下面的代码。我曾尝试在输入数组中使用reflect.ValueOf(nil)and reflect.Value{},但第一次出现恐慌,因为 nil 没有价值;当我将它传递给 Call 时,第二个恐慌,因为它是一个零反射值。请注意,正如代码所示,当然可以在没有反射的情况下将 nil 传递给函数,包括当该参数是接收者时。问题是:是否可以使用reflect.Value.Call 调用func,将这些参数之一作为nil 传递?您可以在以下位置构建和运行代码:http : //play.golang.org/p/x9NXMDHWdMpackage mainimport "reflect"type Thing struct{}var ( thingPointer = &Thing{} typ = reflect.TypeOf(thingPointer))func (t *Thing) DoSomething() { if t == nil { println("t was nil") } else { println("t was not nil") }}func normalInvokation() { thingPointer.DoSomething() // prints "t was not nil" t := thingPointer t = nil t.DoSomething() // prints "t was nil"}func reflectCallNonNil() { m, _ := typ.MethodByName("DoSomething") f := m.Func f.Call([]reflect.Value{reflect.ValueOf(&Thing{})}) // prints "t was not nil"}func reflectCallNil() { // m, _ := typ.MethodByName("DoSomething") // f := m.Func // f.Call(???) // how can I use f.Call to print "t was nil" ?}func main() { normalInvokation() reflectCallNonNil() reflectCallNil()}
1 回答
- 1 回答
- 0 关注
- 215 浏览
添加回答
举报
0/150
提交
取消