From 74379f7c1947164862b3e65c22e2f7879b762f83 Mon Sep 17 00:00:00 2001 From: hongruiqi Date: Tue, 28 Aug 2012 20:59:34 +0800 Subject: [PATCH] 2.3 review --- 2.3.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/2.3.md b/2.3.md index b9e55941..c89f3877 100644 --- a/2.3.md +++ b/2.3.md @@ -56,7 +56,7 @@ go里面最强大的一个控制逻辑就是for,他即可以用来循环读取 ... } -expression1、expression2、expression3都是表达式,其中expression1和expression3是变量申明或者函数调用返回值之类的,expression2是条件判断,expression1在循环开始之前调用,expression3在循环结束之后调用 +expression1、expression2、expression3都是表达式,其中expression1和expression3是变量申明或者函数调用返回值之类的,expression2是条件判断,expression1在循环开始之前调用,expression3在每轮循环结束之时调用 一个例子比上面讲那么多更有用,那么我们看看下面的例子吧 @@ -107,7 +107,7 @@ for可以用于读取slice和map的数据,配合range for k,v:=range map { fmt.Println("map's key:",k) fmt.Println("map's val:",v) - } + } 其中还可以使用`_`来扔掉不需要的返回值 @@ -186,7 +186,7 @@ sExpr和expr1、expr2、expr3的类型必须一致。Go的switch非常灵活。 - 函数可以有一个或者多个参数,每个参数后面带有类型,通过`,`分隔 - 函数可以返回多个值 - 上面返回值申明了两个变量output1和output2,如果你不想申明也可以,直接就两个类型 -- 如果只有一个返回值,那么你可以省略用以包括返回值的括号 +- 如果只有一个返回值且不申明返回值变量,那么你可以省略用以包括返回值的括号 - 如果没有返回值,那么就直接省略最后的返回信息 下面我们来看一个实际应用函数的例子(用来计算Max值) @@ -314,10 +314,11 @@ arg ... int 告诉Go这个函数接受不定数量的参数。注意,这些参 这样,我们就真的实现了修改x的目的。那么到底传引用有什么好处呢? - 传引用使得多个函数能同时操作同一个变量。 -- 传应用比较轻量级,只是传内存地址,这使得我们函数可以处理大数据量的值,如果传值的话,那么每次调用函数花费在copy上面就会花费大量的内存。所以记住了,当你要操作大数据量的时候,用引用是一个明智的选择。 +- 传引用比较轻量级,只是传内存地址,这使得我们函数可以处理大数据量的值,如果传值的话,那么每次调用函数花费在copy上面就会花费大量的内存。所以记住了,当你要操作大数据量的时候,用引用是一个明智的选择。 +- GO语言中string,slice,map这三种类型的实现机制类似引用,所以可以直接传递,而不用取地址后传递指针。(注:若函数会改变slice的长度,则仍需要取地址传递指针) ###defer -Go里面有一个不错的设计,就是回调函数,有点类似面向对象语言里面的析构函数,当函数执行完之后再执行。特别是当你处理一些打开资源操作时,遇到错误提前返回,那么你需要关闭相应的资源,不然很容易造成内存泄露等问题。如下代码所示,我们一般写打开一个资源是这样操作的: +Go里面有一个不错的设计,就是回调函数,有点类似面向对象语言里面的析构函数,当函数执行完之后再执行。特别是当你处理一些打开资源操作时,遇到错误提前返回,那么你需要关闭相应的资源,不然很容易造成资源泄露等问题。如下代码所示,我们一般写打开一个资源是这样操作的: func ReadWrite() bool { file.Open("file") @@ -357,7 +358,7 @@ Go里面有一个不错的设计,就是回调函数,有点类似面向对象 } ###函数作为值、类型 -我们可以通过类型来操作,他的类型就是所有拥有相同的参数,相同的返回值得一种类型 +我们可以通过类型来操作,他的类型就是所有拥有相同的参数,相同的返回值的一种类型 type type_name func(input1 inputType1 [, input2 inputType2 [, ...]) (result1 resultType1 [, ...]) 函数作为类型到底有什么好处呢?那就是可以把这个类型的函数当做值来传递,请看下面的例子 @@ -401,7 +402,7 @@ Go里面有一个不错的设计,就是回调函数,有点类似面向对象 fmt.Println("Even elements of slice are: ", even) } -函数当做值和类型在我们写一些通用接口的时候非常有用,通过上面例子我们看到test_int这个类型是一个函数,然后这个函数参数和返回值是一样的,但是我们可以实现很多种的逻辑,这样使得我们的程序变得非常的灵活。 +函数当做值和类型在我们写一些通用接口的时候非常有用,通过上面例子我们看到test_int这个类型是一个函数类型,然后两个filter函数的参数和返回值与test_int类型是一样的,但是我们可以实现很多种的逻辑,这样使得我们的程序变得非常的灵活。 ###Panic和Recover