GO語言————4.6 字串
4.6 字串
字串是 UTF-8 字元的一個序列(當字元為 ASCII 碼時則佔用 1 個位元組,其它字元根據需要佔用 2-4 個位元組)。UTF-8 是被廣泛使用的編碼格式,是文字檔案的標準編碼,其它包括 XML 和 JSON 在內,也都使用該編碼。由於該編碼對佔用位元組長度的不定性,Go 中的字串也可能根據需要佔用 1 至 4 個位元組(示例見第 4.6 節),這與其它語言如 C++、Java 或者 Python 不同(Java 始終使用 2 個位元組)。Go 這樣做的好處是不僅減少了記憶體和硬碟空間佔用,同時也不用像其它語言那樣需要對使用 UTF-8 字符集的文字進行編碼和解碼。
字串是一種值型別,且值不可變,即建立某個文字後你無法再次修改這個文字的內容;更深入地講,字串是位元組的定長陣列。
Go 支援以下 2 種形式的字面值:
解釋字串:
該類字串使用雙引號括起來,其中的相關的轉義字元將被替換,這些轉義字元包括:
\n
:換行符\r
:回車符\t
:tab 鍵\u
或\U
:Unicode 字元\\
:反斜槓自身
非解釋字串:
該類字串使用反引號括起來,支援換行,例如:
`This is a raw string \n` 中的 `\n\` 會被原樣輸出。
和 C/C++不一樣,Go 中的字串是根據長度限定,而非特殊字元\0
。
string
型別的零值為長度為零的字串,即空字串 ""
。
一般的比較運算子(==
、!=
、<
、<=
、>=
、>
)通過在記憶體中按位元組比較來實現字串的對比。你可以通過函式len()
來獲取字串所佔的位元組長度,例如:len(str)
。
字串的內容(純位元組)可以通過標準索引法來獲取,在中括號 []
內寫入索引,索引從 0 開始計數:
- 字串 str 的第 1 個位元組:
str[0]
- 第 i 個位元組:
str[i - 1]
- 最後 1 個位元組:
str[len(str)-1]
需要注意的是,這種轉換方案只對純 ASCII 碼的字串有效。
注意事項 獲取字串中某個位元組的地址的行為是非法的,例如:&str[i]
。
字串拼接符 +
兩個字串 s1
和 s2
可以通過 s := s1 + s2
拼接在一起。
s2
追加在 s1
尾部並生成一個新的字串 s
。
你可以通過以下方式來對程式碼中多行的字串進行拼接:
str := "Beginning of the string " +
"second part of the string"
由於編譯器行尾自動補全分號的緣故,加號 +
必須放在第一行。
拼接的簡寫形式 +=
也可以用於字串:
s := "hel" + "lo,"
s += "world!"
fmt.Println(s) //輸出 “hello, world!”
在迴圈中使用加號 +
拼接字串並不是最高效的做法,更好的辦法是使用函式 strings.Join()
(第 4.7.10 節),有沒有更好地辦法了?有!使用位元組緩衝(bytes.Buffer
)拼接更加給力(第 7.2.6 節)!
在第 7 章,我們會講到通過將字串看作是位元組(byte)的切片(slice)來實現對其標準索引法的操作。會在第 5.4.1 節中講到的 for 迴圈只會根據索引返回字串中的純位元組,而在第 5.4.4 節(以及第 7.6.1 節的示例)將會展示如何使用 for-range 迴圈來實現對 Unicode 字串的迭代操作。在下一節,我們會學習到許多有關字串操作的函式和方法,同時 fmt
包中的fmt.Sprint(x)
也可以格式化生成並返回你所需要的字串(第 4.4.3 節)。
練習 4.6 count_characters.go
建立一個用於統計位元組和字元(rune)的程式,並對字串 asSASA ddd dsjkdsjs dk
進行分析,然後再分析 asSASA ddd dsjkdsjsこん dk
,最後解釋兩者不同的原因(提示:使用 unicode/utf8
包)。
相關文章
- Go語言字串高效拼接(三)Go字串
- Go語言字串高效拼接(一)Go字串
- Go語言字串高效拼接(二)Go字串
- 《快學 Go 語言》第 7 課 —— 字串Go字串
- GO語言字串有哪些?詳細分類Go字串
- Go語言————1、初識GO語言Go
- GO語言學習——基本資料型別字串Go資料型別字串
- GO語言Go
- GO語言————7.6 字串、陣列和切片的應用Go字串陣列
- Go語言常用字串處理方法總結Go字串
- GO語言————2、GO語言環境安裝Go
- C語言字串C語言字串
- 字串(C語言)字串C語言
- Go_go語言初探Go
- 【Go語言入門系列】(八)Go語言是不是面嚮物件語言?Go物件
- go 語言常量Go
- Go語言mapGo
- go 語言切片Go
- go語言使用Go
- C語言 - 字串拼接C語言字串
- 什麼是Go語言?Go語言有什麼特點?Go
- Go語言簡史Go
- Go 語言效能分析Go
- go語言的介面Go
- GO語言併發Go
- Go語言介紹Go
- Go語言運算子Go
- go語言安裝Go
- Go語言的”坑“Go
- Go 語言運算子Go
- go 語言陣列Go陣列
- Go 語言函式Go函式
- 初識go語言Go
- GO語言————4.3常量Go
- go語言變數Go變數
- Go語言————7.2 切片Go
- Go語言 - switch/caseGo
- Go語言基礎Go