看过煎鱼的推文,我做了如下测试:
package main
import "fmt"
type T struct{}
func (t *T) Hello() string {
if t == nil {
return "111"
}
return "222"
}
func main() {
var t1 *T
var t2 T
fmt.Println(t1.Hello())
fmt.Println(t2.Hello())
}
到底有打印,还是会 panic?
这道题和煎鱼的题异曲同工,结果也显而易见。
不会发生 panic,会依次打印 111,222。
原因就在于 t1 *T
的声明,t1 的 value 为 nil,type 为 T 类型的指针; t2 T
的声明,t2 的 value 为 {},type 为 T 类型,t2.Hello() = (&t2).Hello(),当然也不会发生 panic;
网友评论