From ad1f8d72812529f60767db4273302b0b20436f16 Mon Sep 17 00:00:00 2001
From: snakelis <779248613@qq.com>
Date: Thu, 15 Dec 2022 23:16:27 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E5=88=87=E7=89=87=E5=92=8C=E6=8C=87?=
=?UTF-8?q?=E9=92=88=E5=85=B3=E7=B3=BB=E6=8F=8F=E8=BF=B0=E9=94=99=E8=AF=AF?=
=?UTF-8?q?=EF=BC=8C=E4=BC=9A=E5=AF=BC=E8=87=B4=E5=AF=B9=E7=9B=B8=E5=85=B3?=
=?UTF-8?q?=E6=A6=82=E5=BF=B5=E7=90=86=E8=A7=A3=E4=B8=A5=E9=87=8D=E6=AD=A7?=
=?UTF-8?q?=E4=B9=89=E3=80=82=20=E5=87=BA=E5=A4=84=EF=BC=9Ahttps://github.?=
=?UTF-8?q?com/ffhelicopter/Go42/issues/7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
eBook/07.2.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/eBook/07.2.md b/eBook/07.2.md
index 96a291aa7..51e3ed02d 100644
--- a/eBook/07.2.md
+++ b/eBook/07.2.md
@@ -104,7 +104,10 @@ func main() {
如果 `s2` 是一个切片,你可以将 `s2` 向后移动一位 `s2 = s2[1:]`,但是末尾没有移动。切片只能向后移动,`s2 = s2[-1:]` 会导致编译错误。切片不能被重新分片以获取数组的前一个元素。
-**注意** 绝对不要用指针指向切片。切片本身已经是一个引用类型,所以它本身就是一个指针!!
+**注意** 绝对不要用指针指向切片。切片本身已经是一个引用类型,所以它本身就是一个指针!!
+**注意** Go slice 不是指针,而是包含指针的结构体 (slice 是结构体变量,但slice[0]直接指向了底层数组的第一个元素)
+源码地址:https://github.com/golang/go/blob/master/src/runtime/slice.go#L13
+
问题 7.2: 给定切片 `b:= []byte{'g', 'o', 'l', 'a', 'n', 'g'}`,那么 `b[1:4]`、`b[:2]`、`b[2:]` 和 `b[:]` 分别是什么?
From baaa5391685301a25861198b327b8f7679d2c449 Mon Sep 17 00:00:00 2001
From: snakelis <779248613@qq.com>
Date: Thu, 15 Dec 2022 23:40:34 +0800
Subject: [PATCH 2/2] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E5=BC=95=E7=94=A8?=
=?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=AE=9A=E4=B9=89=202.=20=E5=8E=9F?=
=?UTF-8?q?=E6=96=87=E4=B8=AD=E5=AF=B9=E5=BC=95=E7=94=A8=E7=B1=BB=E5=9E=8B?=
=?UTF-8?q?=E5=8F=98=E9=87=8F=E7=9A=84=E6=8F=8F=E8=BF=B0=E6=9C=89=E6=AD=A7?=
=?UTF-8?q?=E4=B9=89=EF=BC=8C=E5=BC=95=E7=94=A8=E7=B1=BB=E5=9E=8B=E5=8F=98?=
=?UTF-8?q?=E9=87=8F=E5=92=8C=E5=BA=95=E5=B1=82=E6=95=B0=E6=8D=AE=E7=BB=93?=
=?UTF-8?q?=E6=9E=84=E7=9A=84=E6=8C=87=E9=92=88=E6=98=AF=E5=8C=85=E5=90=AB?=
=?UTF-8?q?=E5=85=B3=E7=B3=BB=EF=BC=8C=E4=BA=A7=E7=94=9F=E6=AD=A7=E4=B9=89?=
=?UTF-8?q?=E4=BC=9A=E5=AF=BC=E8=87=B4=E5=B0=86=E5=BC=95=E7=94=A8=E5=8F=98?=
=?UTF-8?q?=E9=87=8F=E5=92=8C=E6=8C=87=E9=92=88=E7=9A=84=E5=AE=9A=E4=B9=89?=
=?UTF-8?q?=E6=B7=B7=E6=B7=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
eBook/04.4.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/eBook/04.4.md b/eBook/04.4.md
index 4ec3820f2..27d82bee0 100644
--- a/eBook/04.4.md
+++ b/eBook/04.4.md
@@ -158,7 +158,10 @@ func main() {
更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。
-一个引用类型的变量 `r1` 存储的是 `r1` 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。
+**注意** 引用类型表示创建的变量包含一个指向底层数据结构的指针和一组管理底层数据结构的字段。
+> 引用类型之所以可以引用,是因为我们创建引用类型的变量,其实是一个标头值,标头值里包含一个指针,指向底层的数据结构,当我们在函数中传递引用类型时,其实传递的是这个标头值的副本,它所指向的底层结构并没有被复制传递,这也是引用类型传递高效的原因。
+
+一个引用类型的变量 `r1` 包含存储的是 `r1` 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。