解释我的问题的最短方法是代码:
var i interface{} // I can't change it. In fact this is a function,
i = Item{10} // that receives interface{}, that contain object (not pointer to object!)
fmt.Printf("%T %v\n", i, i)
// fmt.Println(i.(NextValuer).NextVal()) // won't compile
i = &i
fmt.Printf("%T %v\n", i, i) // there i is pointer to interface{} (not to Item)
// fmt.Println(i.(NextValuer).NextVal()) // panics
// fmt.Println(i.(*NextValuer).NextVal()) // won't compile
但是,如果我尝试将指向 Item 的指针设置为 i,则代码有效:
i = &Item{10}
fmt.Printf("%T %v\n", i, i)
fmt.Println(i.(NextValuer).NextVal())
但是我的函数接收对象,而不是指向它的指针。我可以得到它的类型(第一fmt.Printf)。但是当我尝试创建指向它的指针时,我收到的是指向interface{},而不是指向我的对象 ( Item) 的指针。
我可以创建指向这个对象的指针来调用NextVal吗?或者可能是其他方式来做到这一点
慕无忌1623718
相关分类