子兮子兮 子兮子兮

No can, but will.

目录
Golang 指针方法接收器是可以为 nil 的
/      

Golang 指针方法接收器是可以为 nil 的

 1package main
 2
 3type NilReceiverStruct struct {
 4	Value string
 5}
 6
 7func (n *NilReceiverStruct) String() string {
 8	if n == nil {
 9		return "I'm nil!"
10	}
11	return n.Value
12}
13
14func (n *NilReceiverStruct) PanicIfNil() string {
15	return n.Value
16}
17
18func main() {
19	var n *NilReceiverStruct = nil
20	println("n.String() =", n.String())         // n.String() = I'm nil!
21	println("n.PanicIfNil() =", n.PanicIfNil()) // panic: runtime error: invalid memory address or nil pointer dereference
22}

如上代码所示,指针接收器是可以为 nil 的,所以为保证代码的稳定性,调用指针方法或方法内部需要注意判断接收器是否为 nil,否则可能会发生恐慌!

panic: runtime error: invalid memory address or nil pointer dereference




我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=wh4u6zpyhe1d