Quote backslash to fix pdf build errors.

This commit is contained in:
jxskiss 2016-09-27 22:19:43 +08:00
parent 99690fd663
commit 94c8488130
5 changed files with 8 additions and 8 deletions

View File

@ -25,7 +25,7 @@
\\ 反斜杠 \\ 反斜杠
``` ```
可以通过十六进制或八进制转义在字符串面值包含任意的字节。一个十六进制的转义形式是\xhh其中两个h表示十六进制数字大写或小写都可以。一个八进制转义形式是\ooo包含三个八进制的o数字0到7但是不能超过`\377`译注对应一个字节的范围十进制为255。每一个单一的字节表达一个特定的值。稍后我们将看到如何将一个Unicode码点写到字符串面值中。 可以通过十六进制或八进制转义在字符串面值包含任意的字节。一个十六进制的转义形式是`\xhh`其中两个h表示十六进制数字大写或小写都可以。一个八进制转义形式是`\ooo`包含三个八进制的o数字0到7但是不能超过`\377`译注对应一个字节的范围十进制为255。每一个单一的字节表达一个特定的值。稍后我们将看到如何将一个Unicode码点写到字符串面值中。
一个原生的字符串面值形式是\`...\`,使用反引号代替双引号。在原生的字符串面值中,没有转义操作;全部的内容都是字面的意思,包含退格和换行,因此一个程序中的原生字符串面值可能跨越多行(译注:在原生字符串面值内部是无法直接写\`字符的,可以用八进制或十六进制转义或+"\`"链接字符串常量完成。唯一的特殊处理是会删除回车以保证在所有平台上的值都是一样的包括那些把回车也放入文本文件的系统译注Windows系统会把回车和换行一起放入文本文件中 一个原生的字符串面值形式是\`...\`,使用反引号代替双引号。在原生的字符串面值中,没有转义操作;全部的内容都是字面的意思,包含退格和换行,因此一个程序中的原生字符串面值可能跨越多行(译注:在原生字符串面值内部是无法直接写\`字符的,可以用八进制或十六进制转义或+"\`"链接字符串常量完成。唯一的特殊处理是会删除回车以保证在所有平台上的值都是一样的包括那些把回车也放入文本文件的系统译注Windows系统会把回车和换行一起放入文本文件中

View File

@ -13,7 +13,7 @@ UTF8是一个将Unicode码点编码为字节序列的变长编码。UTF8编码
Go语言的源文件采用UTF8编码并且Go语言处理UTF8编码的文本也很出色。unicode包提供了诸多处理rune字符相关功能的函数比如区分字母和数组或者是字母的大写和小写转换等unicode/utf8包则提供了用于rune字符序列的UTF8编码和解码的功能。 Go语言的源文件采用UTF8编码并且Go语言处理UTF8编码的文本也很出色。unicode包提供了诸多处理rune字符相关功能的函数比如区分字母和数组或者是字母的大写和小写转换等unicode/utf8包则提供了用于rune字符序列的UTF8编码和解码的功能。
有很多Unicode字符很难直接从键盘输入并且还有很多字符有着相似的结构有一些甚至是不可见的字符译注中文和日文就有很多相似但不同的字。Go语言字符串面值中的Unicode转义字符让我们可以通过Unicode码点输入特殊的字符。有两种形式\uhhhh对应16bit的码点值\Uhhhhhhhh对应32bit的码点值其中h是一个十六进制数字一般很少需要使用32bit的形式。每一个对应码点的UTF8编码。例如下面的字母串面值都表示相同的值 有很多Unicode字符很难直接从键盘输入并且还有很多字符有着相似的结构有一些甚至是不可见的字符译注中文和日文就有很多相似但不同的字。Go语言字符串面值中的Unicode转义字符让我们可以通过Unicode码点输入特殊的字符。有两种形式`\uhhhh`对应16bit的码点值`\Uhhhhhhhh`对应32bit的码点值其中h是一个十六进制数字一般很少需要使用32bit的形式。每一个对应码点的UTF8编码。例如下面的字母串面值都表示相同的值
``` ```
"世界" "世界"
@ -30,7 +30,7 @@ Unicode转义也可以使用在rune字符中。下面三个字符是等价的
'世' '\u4e16' '\U00004e16' '世' '\u4e16' '\U00004e16'
``` ```
对于小于256码点值可以写在一个十六进制转义字节中例如'\x41'对应字符'A',但是对于更大的码点则必须使用\u或\U转义形式。因此'\xe4\xb8\x96'并不是一个合法的rune字符虽然这三个字节对应一个有效的UTF8编码的码点。 对于小于256码点值可以写在一个十六进制转义字节中例如`\x41`对应字符'A',但是对于更大的码点则必须使用`\u`或`\U`转义形式。因此,`\xe4\xb8\x96`并不是一个合法的rune字符虽然这三个字节对应一个有效的UTF8编码的码点。
得益于UTF8编码优良的设计诸多字符串操作都不需要解码操作。我们可以不用解码直接测试一个字符串是否是另一个字符串的前缀 得益于UTF8编码优良的设计诸多字符串操作都不需要解码操作。我们可以不用解码直接测试一个字符串是否是另一个字符串的前缀
@ -115,7 +115,7 @@ for range s {
正如我们前面提到的文本字符串采用UTF8编码只是一种惯例但是对于循环的真正字符串并不是一个惯例这是正确的。如果用于循环的字符串只是一个普通的二进制数据或者是含有错误编码的UTF8数据将会发送什么呢 正如我们前面提到的文本字符串采用UTF8编码只是一种惯例但是对于循环的真正字符串并不是一个惯例这是正确的。如果用于循环的字符串只是一个普通的二进制数据或者是含有错误编码的UTF8数据将会发送什么呢
每一个UTF8字符解码不管是显式地调用utf8.DecodeRuneInString解码或是在range循环中隐式地解码如果遇到一个错误的UTF8编码输入将生成一个特别的Unicode字符'\uFFFD',在印刷中这个符号通常是一个黑色六角或钻石形状,里面包含一个白色的问号"<22>"。当程序遇到这样的一个字符通常是一个危险信号说明输入并不是一个完美没有错误的UTF8字符串。 每一个UTF8字符解码不管是显式地调用utf8.DecodeRuneInString解码或是在range循环中隐式地解码如果遇到一个错误的UTF8编码输入将生成一个特别的Unicode字符`\uFFFD`,在印刷中这个符号通常是一个黑色六角或钻石形状,里面包含一个白色的问号"<22>"。当程序遇到这样的一个字符通常是一个危险信号说明输入并不是一个完美没有错误的UTF8字符串。
UTF8字符串作为交换格式是非常方便的但是在程序内部采用rune序列可能更方便因为rune大小一致支持数组索引和方便切割。 UTF8字符串作为交换格式是非常方便的但是在程序内部采用rune序列可能更方便因为rune大小一致支持数组索引和方便切割。
@ -144,7 +144,7 @@ fmt.Println(string(65)) // "A", not "65"
fmt.Println(string(0x4eac)) // "京" fmt.Println(string(0x4eac)) // "京"
``` ```
如果对应码点的字符是无效的,则用'\uFFFD'无效字符作为替换: 如果对应码点的字符是无效的,则用`\uFFFD`无效字符作为替换:
```Go ```Go
fmt.Println(string(1234567)) // "<22>" fmt.Println(string(1234567)) // "<22>"

View File

@ -55,7 +55,7 @@ func basename(s string) string {
} }
``` ```
path和path/filepath包提供了关于文件路径名更一般的函数操作。使用斜杠分隔路径可以在任何操作系统上工作。斜杠本身不应该用于文件名但是在其他一些领域可能会用于文件名例如URL路径组件。相比之下path/filepath包则使用操作系统本身的路径规则例如POSIX系统使用/foo/bar而Microsoft Windows使用c:\foo\bar等。 path和path/filepath包提供了关于文件路径名更一般的函数操作。使用斜杠分隔路径可以在任何操作系统上工作。斜杠本身不应该用于文件名但是在其他一些领域可能会用于文件名例如URL路径组件。相比之下path/filepath包则使用操作系统本身的路径规则例如POSIX系统使用/foo/bar而Microsoft Windows使用`c:\foo\bar`等。
让我们继续另一个字符串的例子。函数的功能是将一个表示整值的字符串每隔三个字符插入一个逗号分隔符例如“12345”处理后成为“12,345”。这个版本只适用于整数类型支持浮点数类型的支持留作练习。 让我们继续另一个字符串的例子。函数的功能是将一个表示整值的字符串每隔三个字符插入一个逗号分隔符例如“12345”处理后成为“12,345”。这个版本只适用于整数类型支持浮点数类型的支持留作练习。

View File

@ -26,7 +26,7 @@ var y float64 = Pi64
var z complex128 = complex128(Pi64) var z complex128 = complex128(Pi64)
``` ```
对于常量面值不同的写法可能会对应不同的类型。例如0、0.0、0i和'\u0000'虽然有着相同的常量值但是它们分别对应无类型的整数、无类型的浮点数、无类型的复数和无类型的字符等不同的常量类型。同样true和false也是无类型的布尔类型字符串面值常量是无类型的字符串类型。 对于常量面值不同的写法可能会对应不同的类型。例如0、0.0、0i和`\u0000`虽然有着相同的常量值但是它们分别对应无类型的整数、无类型的浮点数、无类型的复数和无类型的字符等不同的常量类型。同样true和false也是无类型的布尔类型字符串面值常量是无类型的字符串类型。
前面说过除法运算符/会根据操作数的类型生成对应类型的结果。因此,不同写法的常量除法表达式可能对应不同的结果: 前面说过除法运算符/会根据操作数的类型生成对应类型的结果。因此,不同写法的常量除法表达式可能对应不同的结果:

View File

@ -6,7 +6,7 @@ Go语言对于这些标准格式的编码和解码都有良好的支持由标
JSON是对JavaScript中各种类型的值——字符串、数字、布尔值和对象——Unicode本文编码。它可以用有效可读的方式表示第三章的基础数据类型和本章的数组、slice、结构体和map等聚合数据类型。 JSON是对JavaScript中各种类型的值——字符串、数字、布尔值和对象——Unicode本文编码。它可以用有效可读的方式表示第三章的基础数据类型和本章的数组、slice、结构体和map等聚合数据类型。
基本的JSON类型有数字十进制或科学记数法、布尔值true或false、字符串其中字符串是以双引号包含的Unicode字符序列支持和Go语言类似的反斜杠转义特性不过JSON使用的是\Uhhhh转义数字来表示一个UTF-16编码译注UTF-16和UTF-8一样是一种变长的编码有些Unicode码点较大的字符需要用4个字节表示而且UTF-16还有大端和小端的问题而不是Go语言的rune类型。 基本的JSON类型有数字十进制或科学记数法、布尔值true或false、字符串其中字符串是以双引号包含的Unicode字符序列支持和Go语言类似的反斜杠转义特性不过JSON使用的是`\Uhhhh`转义数字来表示一个UTF-16编码译注UTF-16和UTF-8一样是一种变长的编码有些Unicode码点较大的字符需要用4个字节表示而且UTF-16还有大端和小端的问题而不是Go语言的rune类型。
这些基础类型可以通过JSON的数组和对象类型进行递归组合。一个JSON数组是一个有序的值序列写在一个方括号中并以逗号分隔一个JSON数组可以用于编码Go语言的数组和slice。一个JSON对象是一个字符串到值的映射写成以系列的name:value对形式用花括号包含并以逗号分隔JSON的对象类型可以用于编码Go语言的map类型key类型是字符串和结构体。例如 这些基础类型可以通过JSON的数组和对象类型进行递归组合。一个JSON数组是一个有序的值序列写在一个方括号中并以逗号分隔一个JSON数组可以用于编码Go语言的数组和slice。一个JSON对象是一个字符串到值的映射写成以系列的name:value对形式用花括号包含并以逗号分隔JSON的对象类型可以用于编码Go语言的map类型key类型是字符串和结构体。例如