update 2.3 .png files and fix some sentences
updates 2.3.inti.png fix words/ sentences in 2.2 and 2.3
This commit is contained in:
1
2.2.md
1
2.2.md
@@ -108,6 +108,7 @@ Go对于已声明但未使用的变量会在编译阶段报错,比如下面的
|
||||
> var a int8
|
||||
> var b int32
|
||||
> c:=a + b
|
||||
>另外,尽管int的长度是32 bit, 但int 与 int32并不可以互用。
|
||||
|
||||
浮点数的类型有`float32`和`float64`两种(没有`float`类型),默认是`float64`。
|
||||
|
||||
|
||||
18
2.3.md
18
2.3.md
@@ -109,7 +109,12 @@ Go里面最强大的一个控制逻辑就是`for`,它即可以用来循环读
|
||||
fmt.Println("map's val:",v)
|
||||
}
|
||||
|
||||
其中还可以使用`_`来丢弃不需要的返回值
|
||||
由于 Go 支持 “多值返回”, 而对于“声明而未被调用”的变量, 编译器会报错, 在这种情况下, 可以使用`_`来丢弃不需要的返回值
|
||||
例如
|
||||
|
||||
for _, v := range map{
|
||||
fmt.Println("map's val:", v)
|
||||
}
|
||||
|
||||
|
||||
###switch
|
||||
@@ -140,7 +145,7 @@ Go里面最强大的一个控制逻辑就是`for`,它即可以用来循环读
|
||||
fmt.Println("All I know is that i is an integer")
|
||||
}
|
||||
|
||||
在第5行中,我们把很多值聚合在了一个`case`里面,同时,Go里面`switch`默认相当于每个`case`后面带有`break`,匹配成功后不会自动向下尝试,而是跳出整个`switch`了,但是可以使用`fallthrough`使其这样做。
|
||||
在第5行中,我们把很多值聚合在了一个`case`里面,同时,Go里面`switch`默认相当于每个`case`最后带有`break`,匹配成功后不会自动向下执行其他case,而是跳出整个`switch`, 但是可以使用`fallthrough`强制执行后面的case代码。
|
||||
|
||||
integer := 6
|
||||
switch integer {
|
||||
@@ -186,8 +191,9 @@ Go里面最强大的一个控制逻辑就是`for`,它即可以用来循环读
|
||||
- 函数可以有一个或者多个参数,每个参数后面带有类型,通过`,`分隔
|
||||
- 函数可以返回多个值
|
||||
- 上面返回值声明了两个变量`output1`和`output2`,如果你不想声明也可以,直接就两个类型
|
||||
- 如果只有一个返回值且不声明返回值变量,那么你可以省略用以包括返回值的括号
|
||||
- 如果只有一个返回值且不声明返回值变量,那么你可以省略 包括返回值 的括号
|
||||
- 如果没有返回值,那么就直接省略最后的返回信息
|
||||
- 如果有返回值, 那么必须在函数的外层添加return语句
|
||||
|
||||
下面我们来看一个实际应用函数的例子(用来计算Max值)
|
||||
|
||||
@@ -215,7 +221,7 @@ Go里面最强大的一个控制逻辑就是`for`,它即可以用来循环读
|
||||
fmt.Printf("max(%d, %d) = %d\n", y, z, max(y,z)) // 也可在这直接调用它
|
||||
}
|
||||
|
||||
上面这个里面我们可以看到`max`函数有两个参数,它们的类型都是`int`,那么第一个变量的类型可以省略,默认为离它最近的类型,同理多于2个同类型的变量或者返回值。同时我们注意到它的返回值就是一个类型,这个就是省略写法。
|
||||
上面这个里面我们可以看到`max`函数有两个参数,它们的类型都是`int`,那么第一个变量的类型可以省略(即 a,b int,而非 a int, b int),默认为离它最近的类型,同理多于2个同类型的变量或者返回值。同时我们注意到它的返回值就是一个类型,这个就是省略写法。
|
||||
|
||||
###多个返回值
|
||||
Go语言和C相比,更先进的地方,其中一点就是能够返回多个值,也许这个思想来源于Python。
|
||||
@@ -283,7 +289,7 @@ Go函数支持变参。接受变参的函数是有着不定数量的参数的。
|
||||
fmt.Println("x = ", x) // 应该输出"x = 3"
|
||||
}
|
||||
|
||||
看到了吗?虽然我们调用了`add1`函数,并且在`add1`中执行`a=a+1`操作,但是上面例子中`x`变量的值没有发生变化
|
||||
看到了吗?虽然我们调用了`add1`函数,并且在`add1`中执行`a = a+1`操作,但是上面例子中`x`变量的值没有发生变化
|
||||
|
||||
理由很简单:因为当我们调用`add1`的时候,`add1`接收的参数其实是`x`的copy,而不是`x`本身。
|
||||
|
||||
@@ -314,7 +320,7 @@ Go函数支持变参。接受变参的函数是有着不定数量的参数的。
|
||||
这样,我们就达到了修改`x`的目的。那么到底传指针有什么好处呢?
|
||||
|
||||
- 传指针使得多个函数能操作同一个对象。
|
||||
- 传指针比较轻量级,只是传内存地址,我们可以通过指针高效的传递大的结构体。如果传值的话,那么每次传递, 在copy上面就会花费大量的时间和内存。所以记住了,当你要传递大的结构体的时候,用指针是一个明智的选择。
|
||||
- 传指针比较轻量级 (8 bytes)只是传内存地址,我们可以通过指针高效的传递大的结构体。如果传值的话,那么每次传递, 在copy上面就会花费大量的时间和内存。所以记住了,当你要传递大的结构体的时候,用指针是一个明智的选择。
|
||||
- Go语言中`string`,`slice`,`map`这三种类型的实现机制类似指针,所以可以直接传递,而不用取地址后传递指针。(注:若函数需改变`slice`的长度,则仍需要取地址传递指针)
|
||||
|
||||
###defer
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 93 KiB |
Reference in New Issue
Block a user