修改了一些发现的错别字和概念的地方
This commit is contained in:
28
2.2.md
28
2.2.md
@@ -273,7 +273,7 @@ array就是数组,它的定义如下`[n]type`,n表示数组的长度,type表
|
|||||||
|
|
||||||
###slice
|
###slice
|
||||||
|
|
||||||
我们很多的应用场景里面,数组不能满足我们的需求,因为我们不知道刚开始申明的时候到底需要多大的数组,也就是我们需要动态数组,GO里面我们叫做`slice`
|
在很多的应用场景里面,数组不能满足我们的需求,因为在刚开始的时候,我们不知道到底需要多大的数组合适,所以我们需要动态数组,在go里面这种数据结构叫`slice`
|
||||||
|
|
||||||
`slice`并不是真正意义上面的动态数组,而是一个引用类型,`slice`总是指向底层的一个`array`。`slice`的申明也可以像`array`一样,只要省略size
|
`slice`并不是真正意义上面的动态数组,而是一个引用类型,`slice`总是指向底层的一个`array`。`slice`的申明也可以像`array`一样,只要省略size
|
||||||
|
|
||||||
@@ -286,19 +286,19 @@ array就是数组,它的定义如下`[n]type`,n表示数组的长度,type表
|
|||||||
|
|
||||||
slice可以从一个数组或者一个已经存在的slice里面再次申明,`slice`通过array[i:j]来获取,i是数组的开始位置,j是结束位置,但不包含array[j],他的长度是j-i
|
slice可以从一个数组或者一个已经存在的slice里面再次申明,`slice`通过array[i:j]来获取,i是数组的开始位置,j是结束位置,但不包含array[j],他的长度是j-i
|
||||||
|
|
||||||
//申明一个含有10个字符元素的数组
|
//申明一个含有十个字符元素的数组
|
||||||
var array [10]byte {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
|
var ar[10]byte {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
|
||||||
|
|
||||||
//申明三个含有byte的slice
|
//申明两个含有byte的slice
|
||||||
var a_slice,b_slice,c_slice []byte
|
var a,b[]byte
|
||||||
|
|
||||||
//a_slice指向数组的第2个元素开始,并到第五个元素结束,
|
//a指向数组的第2个元素开始,并到第五个元素结束,
|
||||||
a_slice = array[2:5]
|
a = ar[2:5]
|
||||||
//现在a_slice含有的元素: array[2], array[3] and array[4]
|
//现在a含有的元素: ar[2], ar[3] and ar[4]
|
||||||
|
|
||||||
// b_slice是另一个数组的slice.
|
// b是数组ar的另一个slice.
|
||||||
b_slice = array[3:5]
|
b = ar[3:5]
|
||||||
// b_slice的元素是: array[3], array[4]
|
// b的元素是: ar[3], ar[4]
|
||||||
|
|
||||||
注意slice和数组申明时的区别:申明数组时,方括号内写明了数组的长度或使用`...`自动计算长度,而申明slice时,方括号内没有任何字符
|
注意slice和数组申明时的区别:申明数组时,方括号内写明了数组的长度或使用`...`自动计算长度,而申明slice时,方括号内没有任何字符
|
||||||
|
|
||||||
@@ -333,7 +333,7 @@ slice有一些简便的操作
|
|||||||
|
|
||||||
slice是引用类型,所以当引用改变其中项目的值的时候,那么其他的所有引用都会改变该值,例如上面的a_slice和b_slice,如果修改了a_slice中项目的值,那么b_slice相对应的值也会改变。
|
slice是引用类型,所以当引用改变其中项目的值的时候,那么其他的所有引用都会改变该值,例如上面的a_slice和b_slice,如果修改了a_slice中项目的值,那么b_slice相对应的值也会改变。
|
||||||
|
|
||||||
从概念上面来说slice想一个结构体,这个结构体包含了三个元素:
|
从概念上面来说slice像一个结构体,这个结构体包含了三个元素:
|
||||||
- 一个指针,指向数组中slice指定的开始位置
|
- 一个指针,指向数组中slice指定的开始位置
|
||||||
- 长度,slice的长度
|
- 长度,slice的长度
|
||||||
- 最大长度,也就是slice开始位置到数组的最后位置的长度
|
- 最大长度,也就是slice开始位置到数组的最后位置的长度
|
||||||
@@ -359,7 +359,7 @@ slice下面有几个有用的内置函数
|
|||||||
|
|
||||||
map也就是python中字典的概念,它的格式`map[keyType]valueType`
|
map也就是python中字典的概念,它的格式`map[keyType]valueType`
|
||||||
|
|
||||||
我们看下面的代码,map的读取和设置也类似slice一样,通过key来操作,只是slice只有int的key,而map多了很多类型,可以是int,可以是string
|
我们看下面的代码,map的读取和设置也类似slice一样,通过key来操作,只是slice只有int的key,而map多了很多类型,可以是int,可以是string及所有完全定义了"=="与"!="操作的类型
|
||||||
|
|
||||||
// 申明一个key是字符串,值为int的字典
|
// 申明一个key是字符串,值为int的字典
|
||||||
var numbers map[string] int
|
var numbers map[string] int
|
||||||
@@ -395,7 +395,7 @@ map的初始化可以通过key:val的方式初始化值,同时map内置有判
|
|||||||
fmt.Println("We have no rating associated with C# in the map")
|
fmt.Println("We have no rating associated with C# in the map")
|
||||||
}
|
}
|
||||||
|
|
||||||
delete rating["C"] //删除key为C的元素
|
delete( rating, "C") //删除key为C的元素
|
||||||
|
|
||||||
|
|
||||||
上面说过了,map也是一种引用类型,如果两个map同时指向一个底层,那么一个改变,另一个也相应的改变
|
上面说过了,map也是一种引用类型,如果两个map同时指向一个底层,那么一个改变,另一个也相应的改变
|
||||||
|
|||||||
4
2.3.md
4
2.3.md
@@ -37,7 +37,7 @@ Go的if还有一个强大的地方就是条件里面允许申明一个变量,
|
|||||||
|
|
||||||
###goto
|
###goto
|
||||||
|
|
||||||
Go有goto语句——明智的使用它。用goto跳转到一定是当前函数内定义的标签。例如假设这样一个循环:
|
Go有goto语句——请明智的使用它。用goto跳转到一定是当前函数内定义的标签。例如假设这样一个循环:
|
||||||
|
|
||||||
func myfunc() {
|
func myfunc() {
|
||||||
i := 0
|
i := 0
|
||||||
@@ -89,7 +89,7 @@ expression1、expression2、expression3都是表达式,其中expression1和exp
|
|||||||
sum += sum
|
sum += sum
|
||||||
}
|
}
|
||||||
|
|
||||||
在循环里面有两个关键操作`break`和`continue` ,`break`操作是跳出当前循环,`continue`是跳出本次循环,详细参考如下例子
|
在循环里面有两个关键操作`break`和`continue` ,`break`操作是跳出当前循环,`continue`是跳出本次循环,当嵌套过深的时候,break可以配合标签使用,即跳出标签所指定的循环,详细参考如下例子
|
||||||
|
|
||||||
for index := 10; index>0; index-- {
|
for index := 10; index>0; index-- {
|
||||||
if index == 5{
|
if index == 5{
|
||||||
|
|||||||
Reference in New Issue
Block a user