From 71dbbfe3f0f5ffca9cbdca22a5d41bf8b5b23c20 Mon Sep 17 00:00:00 2001 From: kingmax-chan Date: Sun, 18 Jan 2015 10:43:34 +0800 Subject: [PATCH] Update 02.3.md As per my test, it should be "channel, slice and map" which are like the pointer mechanism. And string is immutable object in Golang as well. And I did some tests to verify that point. see http://kanglecjr.iteye.com/admin/blogs/2176839 --- zh/02.3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh/02.3.md b/zh/02.3.md index 0fb5add1..869a20d3 100644 --- a/zh/02.3.md +++ b/zh/02.3.md @@ -321,7 +321,7 @@ Go函数支持变参。接受变参的函数是有着不定数量的参数的。 - 传指针使得多个函数能操作同一个对象。 - 传指针比较轻量级 (8bytes),只是传内存地址,我们可以用指针传递体积大的结构体。如果用参数值传递的话, 在每次copy上面就会花费相对较多的系统开销(内存和时间)。所以当你要传递大的结构体的时候,用指针是一个明智的选择。 -- Go语言中`string`,`slice`,`map`这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递指针。(注:若函数需改变`slice`的长度,则仍需要取地址传递指针) +- Go语言中`channel`,`slice`,`map`这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递指针。(注:若函数需改变`slice`的长度,则仍需要取地址传递指针) ### defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回。特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题。如下代码所示,我们一般写打开一个资源是这样操作的: