golang定义空指针_Golang 空指针nil的方法和数据成员

golang中,有一个特殊的指针值nil.

如何使用nil没有方法和成员变量呢?

下面来看下具体例子。

程序中,定义结构体类型Plane, 将Plane类型的指针作为函数的参数,然后传入nil作为实参。

在函数中,使用nil访问Plane的方法。

package main

import (

"fmt"

)

type Plane struct {

Num int

}

func (this *Plane) Fly1(){

fmt.Println("Fly1......")

}

func main(){

test(nil)

}

func test(pl *Plane) {

pl.Fly1()

}

output:

Fly1......

可以看到,正常输出。

添加一个Fly2的方法,定义如下:

func (this *Plane) Fly2(){

fmt.Println("Fly2......Num:", this.Num)

}

func test(pl *Plane) {

pl.Fly2()

}

在该方法中,访问Plane的数据成员变量Num.

看下输出结果:

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

[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1099302]

goroutine 1 [running]:

main.(*Plane).Fly2(...)

/Users/lanyang/workspace/mt_go_exercise/t.go:18

main.test(0x0)

/Users/lanyang/workspace/mt_go_exercise/t.go:28 +0x82

main.main()

/Users/lanyang/workspace/mt_go_exercise/t.go:23 +0x2a

exit status 2

可以看到,程序crash了。

为什么nil访问方法可以,访问成员变量就会crash呢?

关于nil的定义:

// nil is a predeclared identifier representing the zero value for a pointer, channel, func, interface, map, or slice type.

var nil Type // Type must be a pointer, channel, func, interface, map, or slice type

指针类型的nil没有分配内存空闲,对于方法,不需要存储空间,而成员变量需要内存空间存放,所以当nil访问成员变量时,由于引用了无效的内存,所以crash.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值