Go 分布式学习利器(7)-- 字符串
生活随笔
收集整理的這篇文章主要介紹了
Go 分布式学习利器(7)-- 字符串
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 字符串 聲明
- 2. Unicode 和 utf-8的區(qū)別
- 3. string中的字符遍歷
- 4. string的 字符分隔 和字符拼接函數(shù)
- 5. string to Int和 Int to string函數(shù)
1. 字符串 聲明
Go中的字符串類(lèi)型與其他編譯型語(yǔ)言的主要差異如下:
- string 是數(shù)據(jù)類(lèi)型,不是指針或 引用類(lèi)型
- string 是只讀的byte slice,
len函數(shù) 可以顯示該類(lèi)型變量所包含的byte數(shù) - string 的byte數(shù)組可以存放 任何數(shù)據(jù)(文本數(shù)據(jù)/二進(jìn)制數(shù)據(jù))
如下測(cè)試函數(shù):
func TestString(t *testing.T){var s stringt.Log(s)// s[1] = '3' // fail,字符串類(lèi)型在Go中是只讀的,嘗試修改會(huì)報(bào)編譯錯(cuò)誤s = "hello"t.Log(len(s)) // 保存字符串中的byte數(shù)s = "\xE4\xB8\xA5" // 存放二進(jìn)制數(shù)據(jù),表示一個(gè)中文的 "嚴(yán)"t.Log(s)t.Log(len(s))
}
最后的輸出如下:
=== RUN TestStringstring_test.go:7: string_test.go:10: 5string_test.go:13: 嚴(yán)string_test.go:14: 3
2. Unicode 和 utf-8的區(qū)別
- Unicode 是一種字符集(code point)
- UTF8 是 unicode 的存儲(chǔ)實(shí)現(xiàn)(轉(zhuǎn)換為字節(jié)序列的規(guī)則)
如下代碼可以看到一個(gè)中文漢字在,unicode存儲(chǔ)和具體的utf-8 格式下的16進(jìn)制區(qū)別:
func TestUnicode(t *testing.T) {var s strings = "中"t.Log(len(s))c := []rune(s) // 轉(zhuǎn)換為切片t.Log(len(c)) // rune 的長(zhǎng)度t.Logf("中 unicode %x", c[0])t.Logf("中 utf-8 %x",s)
}
輸出如下:
=== RUN TestUnicodestring_test.go:21: 3string_test.go:24: 1string_test.go:25: 中 unicode 4e2dstring_test.go:26: 中 utf-8 e4b8ad
--- PASS: TestUnicode (0.00s)
接下來(lái)我們可以整體出如下規(guī)則:
在 string中存儲(chǔ)了3個(gè)byte,分別是E4,B8,AD 即 上圖中的最后一行。
3. string中的字符遍歷
string 中的遍歷形式和之前提過(guò)的其他數(shù)組,map等形態(tài)類(lèi)似。
不過(guò)這里的輸出形式可能需要注意一下, 輸出漢字時(shí)需要格式化輸出為unicode的類(lèi)型%[1]x
func TestStringTravel(t *testing.T) {s := "我是一個(gè)中國(guó)人"for _,c := range s {t.Logf("%[1]c %[1]d",c) // 第二個(gè)輸出 %[1]d 表示string默認(rèn)轉(zhuǎn)換為的rune,不需要顯示指定.}
}
輸出如下:
=== RUN TestStringTravelstring_test.go:32: 我 25105string_test.go:32: 是 26159string_test.go:32: 一 19968string_test.go:32: 個(gè) 20010string_test.go:32: 中 20013string_test.go:32: 國(guó) 22269string_test.go:32: 人 20154
4. string的 字符分隔 和字符拼接函數(shù)
這里簡(jiǎn)單介紹一些Go語(yǔ)言中 字符串相關(guān)的常用函數(shù):
- strings.Split 字符串分隔函數(shù)
- strings.Join 字符串拼接函數(shù)
注意實(shí)際使用的過(guò)程中strings是需要類(lèi)似fmt,testing這樣的import到程序中的
func TestStringFunc(t *testing.T) {s := "A,B,C"sp := strings.Split(s, ",") // split函數(shù) 通過(guò)逗號(hào) 將 s 分割為字符串?dāng)?shù)組for _,c := range sp{t.Log(c)}t.Logf("%T %T",sp,sp[0])attach := strings.Join(sp,"-") // Join函數(shù),重新指定具體的鏈接符,將字符串?dāng)?shù)組中的字符串用鏈接起來(lái)t.Log(attach)
}
輸出如下:
=== RUN TestStringFuncstring_test.go:44: Astring_test.go:44: Bstring_test.go:44: Cstring_test.go:46: []string string # 分隔后的結(jié)果是一個(gè)字符串?dāng)?shù)組,數(shù)組內(nèi)的每一個(gè)元素都是字符串string_test.go:50: A-B-C
--- PASS: TestStringFunc (0.00s)
5. string to Int和 Int to string函數(shù)
- strconv.Itoa 整型轉(zhuǎn)字符串
- strconv.Atoi 字符串轉(zhuǎn)整型
其中strconv.Atoi 字符串轉(zhuǎn)整型函數(shù) 會(huì)返回兩個(gè)值,一個(gè)是正常的轉(zhuǎn)換成功的值,一個(gè)是轉(zhuǎn)換失敗的返回值。
測(cè)試函數(shù)如下:
func TestStringExchangeInt(t *testing.T) {s := strconv.Itoa(10) // 整型轉(zhuǎn)字符串t.Log("str" + s)a,err:= strconv.Atoi("10")if err == nil{t.Log(10 + a)}
}
輸出如下:
=== RUN TestStringExchangeIntstring_test.go:56: str10string_test.go:60: 20
--- PASS: TestStringExchangeInt (0.00s)
總結(jié)
以上是生活随笔為你收集整理的Go 分布式学习利器(7)-- 字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 求一个阳光微信网名
- 下一篇: Go 分布式学习利器(8)-- Go的函