GoTips-- make和new对比

new

只接受一个参数,这个参数是一个类型,分配好内存后,返回一个指向该类型内存地址的指针。同时请注意它同时把分配的内存置为零,也就是类型的零值。

package main

import (
	"fmt"
	"sync"
)

type people struct {
	m    sync.Mutex
	name string
	age  int
	sex  string
}

func main() {

	zzt := new(people) //默认给u分配到内存全部为0

	zzt.m.Lock()
	zzt.name = "zzt"
	zzt.age = 22
	zzt.m.Unlock()

	fmt.Printf("%v \n %T \n", zzt, zzt)
}

&{{0 0} zzt 22 }
 *main.people

make

make用于内存分配,且只适用于:

chan

map

slice

它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型。

且这三种类型是引用类型,所以必须要初始化

make与new的异同

相同

堆空间分配

不同

make: 只用于slice、map以及channel的初始化, 无可替代

new: 用于类型内存分配(初始化值为0), 不常用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值