Unix编程常见问题解答(FAQ/Frequently Asked Questions)(v1.37)(中文版 v0.1.0) 作者:天下一菜 来源:博客园 问题目录 ******** (译者:这里我有意保留原文以便于查询) 1. Process Control 进程控制 1.1 Creating new processes: fork() 创建新进程:fork函数 1.1.1 What does fork() do? fork函数干什么? 1.1.2 What's the differenc
概述
Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似。不过解释两者之间的不同也非常容易。
new 的主要特性
首先 new 是内建函数,你可以从 http://golang.org/pkg/builtin/#new 这儿看到它,它的定义也很简单:
代码如下:
func new(Type) *Type
官方文档对于它的描述是:
代码如下:
内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针
根据这
new
不会初始化内存,只会将内存置零。
new(T)为类型T的新项分配已置零的内存空间,并返回它的地址,也就是一个*T的值。
用Go的术语来说,它返回一个指针,该指针指向新分配的,类型为T的零值。
make
内建函数make(T, args)不同于new(T)。它只用于创建slice、map和chan,并返回类型为T(而非*T)的一个已初始化(而非零值)的值。
原因在于,这三种类型本质上为引用数据类型,在使用前必须初始化。例如,slice是一个具有三项内容的描述符,包含一个指向(数组内部)数据