Go語言字符串
字符串在 Go 語言中以原生數據類型出現,使用字符串就像使用其他原生數據類型(int、bool、float32、float64 等)一樣。
字符串的值爲雙引號中的內容,可以在 Go 語言的源碼中直接添加非 ASCII 碼字符,代碼如下:
str := "hello world"
ch := "中文"
字符串轉義符
Go 語言的字符串常見轉義符包含回車、換行、單雙引號、製表符等,如下表所示
Go語言的常見轉義符:
轉移符 | 含 義 |
---|---|
\r | 回車符(返回行首) |
\n | 換行符(直接跳到下一行的同列位置) |
\t | 製表符 |
' | 單引號 |
" | 雙引號 |
\ | 反斜槓 |
在 Go 語言源碼中使用轉義符代碼如下:
package main
import (
"fmt"
)
func main() {
fmt.Println("str := \"c:\\Go\\bin\\go.exe\"")
}
代碼運行結果:
str := "c:\Go\bin\go.exe"
這段代碼中將雙引號和反斜槓“”進行轉義。
字符串實現基於 UTF-8 編碼
Go 語言裏的字符串的內部實現使用 UTF-8 編碼。通過 rune 類型,可以方便地對每個 UTF-8 字符進行訪問。當然,Go 語言也支持按傳統的 ASCII 碼方式進行逐字符訪問。
定義多行字符串
在源碼中,將字符串的值以雙引號書寫的方式是字符串的常見表達方式,被稱爲字符串字面量(string literal)。這種雙引號字面量不能跨行。如果需要在源碼中嵌入一個多行字符串時,就必須使用`
字符,代碼如下:
const str = ` 第一行
第二行
第三行
\r\n
`
fmt.Println(str)
代碼運行結果:
第一行
第二行
第三行
\r\n
`
叫反引號,就是鍵盤上 1 鍵左邊的鍵,兩個反引號間的字符串將被原樣賦值到 str 變量中。
在這種方式下,反引號間換行將被作爲字符串中的換行,但是所有的轉義字符均無效,文本將會原樣輸出。
多行字符串一般用於內嵌源碼和內嵌數據等,代碼如下:
const codeTemplate = `// Generated by github.com/davyxu/cellnet/
protoc-gen-msg
// DO NOT EDIT!{{range .Protos}}
// Source: {{.Name}}{{end}}
package {{.PackageName}}
{{if gt .TotalMessages 0}}
import (
"github.com/davyxu/cellnet"
"reflect"
_ "github.com/davyxu/cellnet/codec/pb"
)
{{end}}
func init() {
{{range .Protos}}
// {{.Name}}{{range .Messages}}
cellnet.RegisterMessageMeta("pb","{{.FullName}}", reflect.TypeOf((*{{.Name}})(nil)).Elem(), {{.MsgID}}) {{end}}
{{end}}
}
`
這段代碼只定義了一個常量 codeTemplate,類型爲字符串,使用`
定義。字符串的內容爲一段代碼生成中使用到的 Go 源碼格式。
在`
間的所有代碼均不會被編譯器識別,而只是作爲字符串的一部分。
視頻和代碼
鏈接:https://pan.baidu.com/s/1XFd3vNQNGuRtwPIqZs1YLQ
提取碼:tjg1