深入解析Go?變量字符串與字符編碼問(wèn)題
字符串就是一串固定長(zhǎng)度的字符連接起來(lái)的字符序列(很多字符拼接在一起的)。
Go的字符串是由單個(gè)字節(jié)連接起來(lái)的。Go語(yǔ)言的字符串的字節(jié)使用UTF-8編碼標(biāo)識(shí)Unicode文本
字符串
與其他主要編程語(yǔ)?的差異
string 是數(shù)據(jù)類型,不是引?或指針類型(因?yàn)槭菙?shù)據(jù)類型,所以string類型的零值不會(huì)是一個(gè)空類型nil,而是一個(gè)空字符串。)
var a []int if a == nil{ fmt.Println("a is nil") } var b string if b == ""{ fmt.Println("b is kong") }
string 是只讀的 byte slice,len 函數(shù)可以它所包含的 byte 數(shù)(string底層也是一個(gè)byte的數(shù)組)
string 的 byte 數(shù)組可以存放任何數(shù)據(jù)
var s string fmt.Println(len(s)) // s[1] = "3" string是不可變的byte slice s = "hello" fmt.Println(len(s)) s = "\xE4\xB8\xA5" //可以存儲(chǔ)任何二進(jìn)制數(shù)據(jù) fmt.Println(s,len(s)) 0 5 嚴(yán) 3
可以看到len得到的是字符串里面的byte數(shù),不一定代表里面的字符數(shù)。(中文由3個(gè)byte組成)
Unicode UTF8
- Unicode 是?種字符集(code point)(是字符的編碼)
- UTF8 是 unicode 的存儲(chǔ)實(shí)現(xiàn) (轉(zhuǎn)換為字節(jié)序列的規(guī)則,也就是我提供了一種編碼,并沒(méi)有說(shuō)這種編碼在物理上怎么存儲(chǔ)起來(lái))
rune是能夠取出字符串里面unicode,這樣就可以得到字符串??梢钥吹絬tf8存儲(chǔ)分為了三個(gè)byte。
s = "中" fmt.Println(len(s)) //是byte數(shù) c := []rune(s) //rune能夠取出字符串里面的unicode,這是c語(yǔ)言的機(jī)制,能夠幫我們做轉(zhuǎn)換 fmt.Printf("中 unicode 編碼%x\n",c[0]) fmt.Printf("中 UTF8 存儲(chǔ)樣式 %x",s) 3 中 unicode 編碼4e2d 中 UTF8 存儲(chǔ)樣式 e4b8ad
可以看到中字在字符編碼集里面的編碼,物理存儲(chǔ)形式是依賴于utf8規(guī)則,被存儲(chǔ)為0xE4B8AD,最后放在了string對(duì)應(yīng)byte切片里面。分別是3個(gè)byte,每個(gè)byte放一個(gè)。
常?字符串函數(shù)
- strings 包 (https://golang.org/pkg/strings/)
- strconv 包 (https://golang.org/pkg/strconv/)
到此這篇關(guān)于Go 變量字符串與字符編碼的文章就介紹到這了,更多相關(guān)go 變量字符串字符編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言通過(guò)smtp發(fā)送郵件的方法
這篇文章主要介紹了Go語(yǔ)言通過(guò)smtp發(fā)送郵件的方法,涉及Go語(yǔ)言發(fā)送郵件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02詳解Go語(yǔ)言如何實(shí)現(xiàn)并發(fā)安全的map
go語(yǔ)言提供的數(shù)據(jù)類型中,只有channel是并發(fā)安全的,基礎(chǔ)map并不是并發(fā)安全的,本文為大家整理了三種實(shí)現(xiàn)了并發(fā)安全的map的方案,有需要的可以參考下2023-12-12讓goland支持proto文件類型的實(shí)現(xiàn)
這篇文章主要介紹了讓goland支持proto文件類型的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12使用gopkg.in/yaml.v3?解析YAML數(shù)據(jù)詳解
這篇文章主要為大家介紹了使用gopkg.in/yaml.v3?解析YAML數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09go語(yǔ)言實(shí)現(xiàn)十大常見的排序算法示例
這篇文章主要為大家介紹了go語(yǔ)言實(shí)現(xiàn)十大常見的排序算法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08gorm FirstOrCreate和受影響的行數(shù)實(shí)例
這篇文章主要介紹了gorm FirstOrCreate和受影響的行數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Golang中的select語(yǔ)句及其應(yīng)用實(shí)例
本文將介紹Golang中的select語(yǔ)句的使用方法和作用,并通過(guò)代碼示例展示其在并發(fā)編程中的實(shí)際應(yīng)用,此外,還提供了一些與select相關(guān)的面試題,幫助讀者更好地理解和應(yīng)用select語(yǔ)句2023-12-12golang NewRequest/gorequest實(shí)現(xiàn)http請(qǐng)求的示例代碼
本文主要介紹了golang NewRequest/gorequest實(shí)現(xiàn)http請(qǐng)求的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08