34
2.2.md
34
2.2.md
@@ -257,19 +257,19 @@ Go之所以会那么简洁,是因为它有一些默认的行为:
|
||||
|
||||
数组可以使用另一种`:=`来声明
|
||||
|
||||
a := [3]int{1,2,3} // 声明了一个长度为3的int数组
|
||||
a := [3]int{1, 2, 3} // 声明了一个长度为3的int数组
|
||||
|
||||
b := [10]int{1,2,3} // 声明了一个长度为10的int数组,其中前三个元素初始化为1、2、3,其它默认为0
|
||||
b := [10]int{1, 2, 3} // 声明了一个长度为10的int数组,其中前三个元素初始化为1、2、3,其它默认为0
|
||||
|
||||
c := [...]int{4,5,6} // 可以省略长度而采用`...`的方式,Go会自动根据元素个数来计算长度
|
||||
c := [...]int{4, 5, 6} // 可以省略长度而采用`...`的方式,Go会自动根据元素个数来计算长度
|
||||
|
||||
也许你会说,我想数组里面还是数组,能实现吗?当然咯,Go支持嵌套数组,即多维数组。比如下面的代码就声明了一个二维数组:
|
||||
|
||||
// 声明了一个二维数组,该数组以两个数组作为元素,其中每个数组中又有4个int类型的元素
|
||||
doubleArray := [2][4]int {[4]int{1,2,3,4}, [4]int{5,6,7,8}}
|
||||
// 声明了一个二维数组,该数组以两个数组作为元素,其中每个数组中又有4个int类型的元素
|
||||
doubleArray := [2][4]int{[4]int{1, 2, 3, 4}, [4]int{5, 6, 7, 8}}
|
||||
|
||||
// 如果内部的元素和外部的一样,那么上面的声明可以简化,直接忽略内部的类型
|
||||
easyArray :=[2][4]int{{1,2,3,4}, {5,6,7,8}}
|
||||
// 如果内部的元素和外部的一样,那么上面的声明可以简化,直接忽略内部的类型
|
||||
easyArray := [2][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}}
|
||||
|
||||
数组的分配如下所示:
|
||||
|
||||
@@ -320,21 +320,21 @@ slice有一些简便的操作
|
||||
下面这个例子展示了更多关于`slice`的操作:
|
||||
|
||||
// 声明一个数组
|
||||
var array = [10]byte {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
|
||||
var array = [10]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
|
||||
// 声明两个slice
|
||||
var aSlice,bSlice
|
||||
var aSlice, bSlice []byte
|
||||
|
||||
// 演示一些简便操作
|
||||
aSlice = array[:3] // 等价于aSlice = array[0:3] aSlice包含元素: a,b,c
|
||||
aSlice = array[5:] // 等价于aSlice = array[5:9] aSlice包含元素: f,g,h,i,j
|
||||
aSlice = array[:] // 等价于aSlice = array[0:9] 这样aSlice包含了全部的元素
|
||||
aSlice = array[:3] // 等价于aSlice = array[0:3] aSlice包含元素: a,b,c
|
||||
aSlice = array[5:] // 等价于aSlice = array[5:9] aSlice包含元素: f,g,h,i,j
|
||||
aSlice = array[:] // 等价于aSlice = array[0:9] 这样aSlice包含了全部的元素
|
||||
|
||||
// 从slice中获取slice
|
||||
aSlice = array[3:7] // aSlice包含元素: d,e,f,g,len=4,cap=8
|
||||
bSlice = aSlice[1:3] // bSlice 包含aSlice[1], aSlice[2] 也就是含有: e,f
|
||||
bSlice = aSlice[:3] // bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f
|
||||
bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:c,d,e,f,g
|
||||
bSlice : aSlice[:] // bSlice包含所有aSlice的元素: d,e,f,g
|
||||
aSlice = array[3:7] // aSlice包含元素: d,e,f,g,len=4,cap=8
|
||||
bSlice = aSlice[1:3] // bSlice 包含aSlice[1], aSlice[2] 也就是含有: e,f
|
||||
bSlice = aSlice[:3] // bSlice 包含 aSlice[0], aSlice[1], aSlice[2] 也就是含有: d,e,f
|
||||
bSlice = aSlice[0:5] // 对slice的slice可以在cap范围内扩展,此时bSlice包含:c,d,e,f,g
|
||||
bSlice = aSlice[:] // bSlice包含所有aSlice的元素: d,e,f,g
|
||||
|
||||
`slice`是引用类型,所以当引用改变其中元素的值时,其它的所有引用都会改变该值,例如上面的`aSlice`和`bSlice`,如果修改了`aSlice`中元素的值,那么`bSlice`相对应的值也会改变。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user