在Go中字符串作為內(nèi)建類(lèi)型垦藏,和C語(yǔ)言是不一樣的。C中沒(méi)有字符串類(lèi)型伞访, 所有需要通過(guò)字符數(shù)組來(lái)表示字符串掂骏,并以指針來(lái)傳遞。
在Go中字符串是一個(gè)定長(zhǎng)字符數(shù)組咐扭,所以當(dāng)其創(chuàng)建之后就無(wú)法直接改變了芭挽。
1滑废、錯(cuò)誤的字符串長(zhǎng)度的獲然确尽:
從字符串字面值看len(s)的結(jié)果應(yīng)該是7,但在Golang中string類(lèi)型的底層是通過(guò)byte數(shù)組實(shí)現(xiàn)的,在unicode編碼中,中文字符占兩個(gè)字節(jié),而在utf-8編碼中,中文字符占三個(gè)字節(jié)而Golang的默認(rèn)編碼正是utf-8.
2、正確的字符串長(zhǎng)度獲热涑谩:
那么問(wèn)題來(lái)了薛闪,rune[ ]是個(gè)啥?
有時(shí)需要將一個(gè)類(lèi)型轉(zhuǎn)換為另一個(gè)類(lèi)型俺陋。在 Go 中可以做到豁延,不過(guò)有一些規(guī)則。首先腊状,將一個(gè)值轉(zhuǎn)換為另一個(gè)是由操作符(看起來(lái)像函數(shù):byte())完成的诱咏,并且不是所有的轉(zhuǎn)換都是允許的。
Go語(yǔ)言中 byte和 rune實(shí)質(zhì)上就是 uint8和 int32類(lèi)型缴挖。byte用來(lái)強(qiáng)調(diào)數(shù)據(jù)是raw data袋狞,而不是數(shù)字;而 rune用來(lái)表示 Unicode的 code point映屋。所以需要遍歷字符串中的字符苟鸯。可以循環(huán)每個(gè)字節(jié)(僅在使用 US ASCII 編碼字符串時(shí)與字符等價(jià)棚点,而它們?cè)?Go 中不存在T绱Α)。因此為了獲得實(shí)際的字符瘫析,需要使用 rune 類(lèi)型砌梆。
3默责、非解釋性字符串:
在多行字符串處理時(shí),需要留意分號(hào)的置入咸包。栗子:
s := "I am coco"
+ "I am lolo"
會(huì)被轉(zhuǎn)換成:
s := "I am coco"傻丝;
+ "I am lolo";
4诉儒、字符串切片:
5葡缰、字符串遍歷:
關(guān)鍵字range 可以將字符串打散成獨(dú)立的Unicode字符,并且起始位按照UTF-8解析
6忱反、字符串修改:
7泛释、字符串包Strings操作: