From d62b47d38c412af9b4b910ef078ca4a2de629ef5 Mon Sep 17 00:00:00 2001 From: chai2010 Date: Tue, 14 Aug 2018 20:43:22 +0800 Subject: [PATCH] =?UTF-8?q?ch1.3:=20=E8=A7=84=E8=8C=83=E5=8C=96=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch1-basic/ch1-03-array-string-and-slice.md | 19 ++++++++++++++---- ...ditaa.png => ch1.3-1-array-4int.ditaa.png} | Bin ...ditaa.txt => ch1.3-1-array-4int.ditaa.txt} | 0 ...1.ditaa.png => ch1.3-2-string-1.ditaa.png} | Bin ...1.ditaa.txt => ch1.3-2-string-1.ditaa.txt} | 0 ...2.ditaa.png => ch1.3-3-string-2.ditaa.png} | Bin ...2.ditaa.txt => ch1.3-3-string-2.ditaa.txt} | 0 ...-1.ditaa.png => ch1.3-4-slice-1.ditaa.png} | Bin ...-1.ditaa.txt => ch1.3-4-slice-1.ditaa.txt} | 0 9 files changed, 15 insertions(+), 4 deletions(-) rename images/{ch1-03-array-4int.ditaa.png => ch1.3-1-array-4int.ditaa.png} (100%) rename images/{ch1-03-array-4int.ditaa.txt => ch1.3-1-array-4int.ditaa.txt} (100%) rename images/{ch1-03-string-1.ditaa.png => ch1.3-2-string-1.ditaa.png} (100%) rename images/{ch1-03-string-1.ditaa.txt => ch1.3-2-string-1.ditaa.txt} (100%) rename images/{ch1-03-string-2.ditaa.png => ch1.3-3-string-2.ditaa.png} (100%) rename images/{ch1-03-string-2.ditaa.txt => ch1.3-3-string-2.ditaa.txt} (100%) rename images/{ch1-03-slice-1.ditaa.png => ch1.3-4-slice-1.ditaa.png} (100%) rename images/{ch1-03-slice-1.ditaa.txt => ch1.3-4-slice-1.ditaa.txt} (100%) diff --git a/ch1-basic/ch1-03-array-string-and-slice.md b/ch1-basic/ch1-03-array-string-and-slice.md index a12e108..e67d5a9 100644 --- a/ch1-basic/ch1-03-array-string-and-slice.md +++ b/ch1-basic/ch1-03-array-string-and-slice.md @@ -27,7 +27,10 @@ var d = [...]int{1, 2, 4: 5, 6} // 定义一个长度为6的int类型数组, 元 数组的内存结构比较简单。比如下面是一个`[4]int{2,3,5,7}`数组值对应的内存结构: -![](../images/ch1-03-array-4int.ditaa.png) +![](../images/ch1.3-1-array-4int.ditaa.png) + +*图 1.3-1 数组布局* + Go语言中数组是值语义。一个数组变量即表示整个数组,它并不是隐式的指向第一个元素的指针(比如C语言的数组),而是一个完整的值。当一个数组变量被赋值或者被传递的时候,实际上会复制整个数组。如果数组较大的话,数组的赋值也会有较大的开销。为了避免复制数组带来的开销,可以传递一个指向数组的指针,但是数组指针并不是数组。 @@ -158,7 +161,10 @@ type StringHeader struct { 我们可以看看字符串“Hello, world”本身对应的内存结构: -![](../images/ch1-03-string-1.ditaa.png) +![](../images/ch1.3-2-string-1.ditaa.png) + +*图 1.3-2 字符串布局* + 分析可以发现,“Hello, world”字符串底层数据和以下数组是完全一致的: @@ -208,7 +214,9 @@ fmt.Println("\xe7\x95\x8c") // 打印: 界 下图展示了“Hello, 世界”字符串的内存结构布局: -![](../images/ch1-03-string-2.ditaa.png) +![](../images/ch1.3-3-string-2.ditaa.png) + +*图 1.3-3 字符串布局* Go语言的字符串中可以存放任意的二进制字节序列,而且即使是UTF8字符序列也可能会遇到坏的编码。如果遇到一个错误的UTF8编码输入,将生成一个特别的Unicode字符‘\uFFFD’,这个字符在不同的软件中的显示效果可能不太一样,在印刷中这个符号通常是一个黑色六角形或钻石形状,里面包含一个白色的问号‘�’。 @@ -360,7 +368,10 @@ type SliceHeader struct { 可以看出切片的开头部分和Go字符串是一样的,但是切片多了一个`Cap`成员表示切片指向的内存空间的最大容量(对应元素的个数,而不是字节数)。下图是`x := []int{2,3,5,7,11}`和`y := x[1:3]`两个切片对应的内存结构。 -![](../images/ch1-03-slice-1.ditaa.png) +![](../images/ch1.3-4-slice-1.ditaa.png) + +*图 1.3-4 切片布局* + 让我们看看切片有哪些定义方式: diff --git a/images/ch1-03-array-4int.ditaa.png b/images/ch1.3-1-array-4int.ditaa.png similarity index 100% rename from images/ch1-03-array-4int.ditaa.png rename to images/ch1.3-1-array-4int.ditaa.png diff --git a/images/ch1-03-array-4int.ditaa.txt b/images/ch1.3-1-array-4int.ditaa.txt similarity index 100% rename from images/ch1-03-array-4int.ditaa.txt rename to images/ch1.3-1-array-4int.ditaa.txt diff --git a/images/ch1-03-string-1.ditaa.png b/images/ch1.3-2-string-1.ditaa.png similarity index 100% rename from images/ch1-03-string-1.ditaa.png rename to images/ch1.3-2-string-1.ditaa.png diff --git a/images/ch1-03-string-1.ditaa.txt b/images/ch1.3-2-string-1.ditaa.txt similarity index 100% rename from images/ch1-03-string-1.ditaa.txt rename to images/ch1.3-2-string-1.ditaa.txt diff --git a/images/ch1-03-string-2.ditaa.png b/images/ch1.3-3-string-2.ditaa.png similarity index 100% rename from images/ch1-03-string-2.ditaa.png rename to images/ch1.3-3-string-2.ditaa.png diff --git a/images/ch1-03-string-2.ditaa.txt b/images/ch1.3-3-string-2.ditaa.txt similarity index 100% rename from images/ch1-03-string-2.ditaa.txt rename to images/ch1.3-3-string-2.ditaa.txt diff --git a/images/ch1-03-slice-1.ditaa.png b/images/ch1.3-4-slice-1.ditaa.png similarity index 100% rename from images/ch1-03-slice-1.ditaa.png rename to images/ch1.3-4-slice-1.ditaa.png diff --git a/images/ch1-03-slice-1.ditaa.txt b/images/ch1.3-4-slice-1.ditaa.txt similarity index 100% rename from images/ch1-03-slice-1.ditaa.txt rename to images/ch1.3-4-slice-1.ditaa.txt