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
IDEA教程IDEA教程IDEA教程IDEA教程IDEA教程IDEA教程心磋登
Intell IDEA的安装、配置与使用
支持的框架额外支持的语言代码提示支持的容器
Spring Mvc
HTML5
Tomcat
GWT
CSS3
Tome
vaadin
SASS
Weblogin
Play
LESS
JBOSs
Grails
Javascr ipt
etty
Web Services Coffeescr ipt
Web Sphere
SE
Node 5
Struts
Action scr ip
概述
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是一个具有三项内容的描述符,包含一个指向(数组内部)数据