2015-12-18 02:53:03 +00:00
|
|
|
|
### 3.5.1. 字符串面值
|
2015-12-16 06:03:43 +00:00
|
|
|
|
|
2015-12-28 00:20:58 +00:00
|
|
|
|
字符串值也可以用字符串面值方式編寫,隻要將一繫列字節序列包含在雙引號卽可:
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
"Hello, 世界"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
![](../images/ch3-04.png)
|
|
|
|
|
|
2015-12-28 00:20:58 +00:00
|
|
|
|
因爲Go語言源文件總是用UTF8編碼,併且Go語言的文本字符串也以UTF8編碼的方式處理,因此我們可以將Unicode碼點也寫到字符串面值中。
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
2015-12-28 00:20:58 +00:00
|
|
|
|
在一個雙引號包含的字符串面值中,可以用以反斜槓`\`開頭的轉義序列插入任意的數據。下面的換行、迴車和製表符等是常見的ASCII控製代碼的轉義方式:
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
|
|
|
|
```
|
2015-12-17 05:13:42 +00:00
|
|
|
|
\a 響鈴
|
2015-12-17 04:07:08 +00:00
|
|
|
|
\b 退格
|
2015-12-17 05:13:42 +00:00
|
|
|
|
\f 換頁
|
|
|
|
|
\n 換行
|
|
|
|
|
\r 迴車
|
2015-12-18 02:53:03 +00:00
|
|
|
|
\t 製表符
|
|
|
|
|
\v 垂直製表符
|
|
|
|
|
\' 單引號 (隻用在 '\'' 形式的rune符號面值中)
|
|
|
|
|
\" 雙引號 (隻用在 "..." 形式的字符串面值中)
|
2015-12-17 05:13:42 +00:00
|
|
|
|
\\ 反斜槓
|
2015-12-17 04:07:08 +00:00
|
|
|
|
```
|
|
|
|
|
|
2015-12-28 00:20:58 +00:00
|
|
|
|
可以通過十六進製或八進製轉義在字符串面值包含任意的字節。一個十六進製的轉義形式是\xhh,其中兩個h表示十六進製數字(大寫或小寫都可以)。一個八進製轉義形式是\ooo,包含三個八進製的o數字(0到7),但是不能超過`\377`(譯註:對應一個字節的范圍,十進製爲255)。每一個單一的字節表達一個特定的值。稍後我們將看到如何將一個Unicode碼點寫到字符串面值中。
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
2015-12-28 00:20:58 +00:00
|
|
|
|
一個原生的字符串面值形式是`...`,使用反引號```代替雙引號。在原生的字符串面值中,沒有轉義操作;全部的內容都是字面的意思,包含退格和換行,因此一個程序中的原生字符串面值可能跨越多行(譯註:在原生字符串面值內部是無法直接寫```字符的,可以用八進製或十六進製轉義或+"```"鏈接字符串常量完成)。唯一的特殊處理是會刪除迴車以保證在所有平台上的值都是一樣的,包括那些把迴車也放入文本文件的繫統(譯註:Windows繫統會把迴車和換行一起放入文本文件中)。
|
2015-12-17 04:07:08 +00:00
|
|
|
|
|
2015-12-28 00:20:58 +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]
|
|
|
|
|
...`
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-12-16 06:03:43 +00:00
|
|
|
|
|