2015-12-18 02:53:03 +00:00
|
|
|
|
### 3.5.1. 字符串面值
|
2015-12-16 06:03:43 +00:00
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
字符串值也可以用字符串面值方式编写,只要将一系列字节序列包含在双引号即可:
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
"Hello, 世界"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![](../images/ch3-04.png)
|
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
因为Go语言源文件总是用UTF8编码,并且Go语言的文本字符串也以UTF8编码的方式处理,因此我们可以将Unicode码点也写到字符串面值中。
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
在一个双引号包含的字符串面值中,可以用以反斜杠`\`开头的转义序列插入任意的数据。下面的换行、回车和制表符等是常见的ASCII控制代码的转义方式:
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
|
|
|
|
```
|
2016-02-15 03:06:34 +00:00
|
|
|
|
\a 响铃
|
2015-12-17 04:07:08 +00:00
|
|
|
|
\b 退格
|
2016-02-15 03:06:34 +00:00
|
|
|
|
\f 换页
|
|
|
|
|
\n 换行
|
|
|
|
|
\r 回车
|
|
|
|
|
\t 制表符
|
|
|
|
|
\v 垂直制表符
|
|
|
|
|
\' 单引号 (只用在 '\'' 形式的rune符号面值中)
|
|
|
|
|
\" 双引号 (只用在 "..." 形式的字符串面值中)
|
|
|
|
|
\\ 反斜杠
|
2015-12-17 04:07:08 +00:00
|
|
|
|
```
|
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
可以通过十六进制或八进制转义在字符串面值包含任意的字节。一个十六进制的转义形式是\xhh,其中两个h表示十六进制数字(大写或小写都可以)。一个八进制转义形式是\ooo,包含三个八进制的o数字(0到7),但是不能超过`\377`(译注:对应一个字节的范围,十进制为255)。每一个单一的字节表达一个特定的值。稍后我们将看到如何将一个Unicode码点写到字符串面值中。
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
2016-08-10 16:51:33 +00:00
|
|
|
|
一个原生的字符串面值形式是\`...\`,使用反引号代替双引号。在原生的字符串面值中,没有转义操作;全部的内容都是字面的意思,包含退格和换行,因此一个程序中的原生字符串面值可能跨越多行(译注:在原生字符串面值内部是无法直接写\`字符的,可以用八进制或十六进制转义或+"\`"链接字符串常量完成)。唯一的特殊处理是会删除回车以保证在所有平台上的值都是一样的,包括那些把回车也放入文本文件的系统(译注:Windows系统会把回车和换行一起放入文本文件中)。
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
2016-02-15 03:06:34 +00:00
|
|
|
|
原生字符串面值用于编写正则表达式会很方便,因为正则表达式往往会包含很多反斜杠。原生字符串面值同时被广泛应用于HTML模板、JSON面值、命令行提示信息以及那些需要扩展到多行的场景。
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
|
|
|
|
```Go
|
|
|
|
|
const GoUsage = `Go is a tool for managing Go source code.
|
|
|
|
|
|
|
|
|
|
Usage:
|
|
|
|
|
go command [arguments]
|
|
|
|
|
...`
|
|
|
|
|
```
|