make和var声明map的区别

最近在刷力扣发现一个好玩的东西,可能因为我以前习惯用make声明slice和map ,然后今天用var关键字声明发现出问题了。

闲来没事谢谢杂谈哈哈哈哈哈哈

例子如下:

func singleNumber(nums []int) int {
	var num int
	var exam map[int]bool
	for _, v := range nums {
		if _, ok := exam[v]; !ok {
			exam[v] = true
		} else {
			exam[v] = false
		}
	}
	for _, v := range nums {
		if exam[v] {
			num = v
		}
	}
	return num
}

在这里插入图片描述

func singleNumber(nums []int) int {
	var num int
	exam:=make(map[int]bool)
	for _, v := range nums {
		if _, ok := exam[v]; !ok {
			exam[v] = true
		} else {
			exam[v] = false
		}
	}
	for _, v := range nums {
		if exam[v] {
			num = v
		}
	}
	return num
}

在这里插入图片描述
我个人理解的原因如下:
make来声明的时候已经分配内存空间并初始化,而用var声明变量的时候没有初始化还是nil。
然后还看到个好玩的东西,然后我从别人那里借鉴过来了。
零切片、空切片、nil切片的区别?
答案我放下面你们想想

Go语言中的零切片、空切片、nil切片这三者是不同的东西,切片的创建方式有很多种,不同方式创建出来的切片也不一样。

  1. 零切片
    我们把切片内部数组的元素都是零值或者底层数组的内容全是 nil的切片叫做零切片,使用make创建的、长度、容量都不为0的切片就是零值切片
slice1 := make([]int,5) // 0 0 0 0 0
slice2 := make([]*int,5) // nil nil nil nil nil
  1. nil切片
    nil切片(nil slice)的长度和容量都为0,并且和nil比较的结果为true,采用直接创建切片的方式、new创建切片的方式都可以创建nil切片
var slice3 []int
var slice4 = *new([]int)
  1. 空切片(empty slice)的长度和容量也都为0,但是和nil的比较结果为false,因为所有的空切片的数据指针都指向同一个地址 0xc42003bda0;使用字面量、make可以创建空切片:
var slice5 = []int{}
var slice6 = make([]int, 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newbie_______

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值