初始化
<code>msg :="hello world"
cnMsg :="你好世界"
multiline := `select
*from
tablewhere
col='val'
`/<code>
單行的字符串初始化和大部分語言一樣,使用雙引號,支持和python一樣的多行,但是用反單引號,就是鍵盤上按鍵區最左上角的那個符號。
長度
<code>msg :="hello world"
fmt.Println(len
(msg)) cnMsg :="你好世界"
fmt.Println(len
(cnMsg))/<code>
上面兩個打印字符串長度的代碼會輸出多少?11和4嗎?錯了,答案是11和16,len方法取得的結果是字符串所佔用的字節數,go語言中的字符串使用的是可變長的UTF8編碼,ASCII碼佔用1個字節,其它字符是2-4個字節,對於中文字符是3個字節。那如何取得我們預想的字符串長度:11和4?可以使用如下的兩個方法:
<code>fmt
.Println
(utf8
.RuneCountInString
(msg
))fmt
.Println
(utf8
.RuneCountInString
(cnMsg
))/<code>
這裡的rune可以認為用於表示一個utf8編碼,如果想把漢字字符串,一個個打印出來,可用如下方法實現:
<code>cnMsg :="你好世界"
msgRunes := []rune
(cnMsg)for
_, c :=range
msgRunes { fmt.Println(string
(c)) }/<code>
SLICE
<code>msg :="hello world"
fmt.Println(msg[:5])
fmt.Println(msg[6:])
fmt.Println(msg[3:5])
fmt.Println(msg[0])/<code>
對於ASCII碼字符串可以使用上面的方法進行類似Java substring的操作,注意最後一個返回的是h的ASCII碼值。對於中文字符如果也像上面的方式操作,打印出來的結果會是亂碼,因為上面的操作是基於字節索引的,中文的substring要像下面這樣操作,先轉成rune表示的UTF8編碼數組,然後基於UTF8編碼索引:
<code>cnMsg :="你好世界"
fmt.Println(string
([]rune
(cnMsg)[0
:1
]))/<code>