[golang] 零值和nil

简单概括:

当你定义一个变量时,会默认赋予这个变量零值.

值类型:0,"",false

引用类型:nil(func,interface,slice,map,channel,指针)

结构体会遍历内部成员,分别赋予零值.

注意点:

1. 注意声明和初始化的区别

var a []int  未初始化,是nil

a:=[]int{}   初始化了,不是nil

2.如果对象是nil,可以调用它的方法

对象是nil,调用方法没问题,赋值时才有问题

3.结构体定义的区别

type student struct {
	age   int
	class []string
}
func (s *student) speak()  {
	 fmt.Println("hahaha")
}

func (s *student) getAge() int {
	return s.age
}

func (s *student) setAge() {
	s.age = 18
}

func (s *student) getClass() []string {
	return s.class
}

func (s *student) setClass() {
	s.class = []string{"math", "chinese"}
}

case1:

var a student
fmt.Println(a==nil)  //cannot convert 'nil' to type 'student'

 a的age和class有默认零值

case2:

var a student
fmt.Println(a.getAge())

没错,打印的是0

case3:

var a *student
fmt.Println(a==nil)
fmt.Println(a.getAge())

a这里是指针类型,因此可以和nil比较.结果是 true

获取a的age字段,因为a都是空的.没有分配内存,你调用肯定是空指针

case4:

var a *student
a.speak()

打印 "hahah" 虽然是nil,但是还是可以调用

case5:

var a = new(student)
a.getAge()

知识点: new的定义  func new(Type) *Type  传入类型,返回类型指针.其值为类型的零值

其实相当于 

a:=&student{}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值