|
@@ -229,6 +229,14 @@ v := make([]int, 10, 50)
|
|
|
**问题 7.3** 给定 `s := make([]byte, 5)`,len(s) 和 cap(s) 分别是多少?`s = s[2:4]`,len(s) 和 cap(s) 又分别是多少?
|
|
**问题 7.3** 给定 `s := make([]byte, 5)`,len(s) 和 cap(s) 分别是多少?`s = s[2:4]`,len(s) 和 cap(s) 又分别是多少?
|
|
|
**问题 7.4** 假设 `s1 := []byte{'p', 'o', 'e', 'm'}` 且 `s2 := s1[2:]`,s2 的值是多少?如果我们执行 `s2[1] = 't'`,s1 和 s2 现在的值又分别是多少?
|
|
**问题 7.4** 假设 `s1 := []byte{'p', 'o', 'e', 'm'}` 且 `s2 := s1[2:]`,s2 的值是多少?如果我们执行 `s2[1] = 't'`,s1 和 s2 现在的值又分别是多少?
|
|
|
|
|
|
|
|
|
|
+*译者注:如何理解new、make、slice、map、channel的关系*
|
|
|
|
|
+
|
|
|
|
|
+*1.slice、map以及channel都是golang内建的一种引用类型,三者在内存中存在多个组成部分,
|
|
|
|
|
+需要对内存组成部分初始化后才能使用,而make就是对三者进行初始化的一种操作方式*
|
|
|
|
|
+
|
|
|
|
|
+*2. new 获取的是存储指定变量内存地址的一个变量,对于变量内部结构并不会执行响应的初始化操作,
|
|
|
|
|
+所以slice、map、channel需要make进行初始化并获取对应的内存地址,而非new简单的获取内存地址*
|
|
|
|
|
+
|
|
|
## 7.2.5 多维 切片
|
|
## 7.2.5 多维 切片
|
|
|
|
|
|
|
|
和数组一样,切片通常也是一维的,但是也可以由一维组合成高维。通过分片的分片(或者切片的数组),长度可以任意动态变化,所以 Go 语言的多维切片可以任意切分。而且,内层的切片必须单独分配(通过 make 函数)。
|
|
和数组一样,切片通常也是一维的,但是也可以由一维组合成高维。通过分片的分片(或者切片的数组),长度可以任意动态变化,所以 Go 语言的多维切片可以任意切分。而且,内层的切片必须单独分配(通过 make 函数)。
|