AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Golang 中的 String、rune 和 byte,你了解了嗎?

來源: 責(zé)編: 時間:2023-10-26 17:12:21 301觀看
導(dǎo)讀解釋StringGo語言中,string就是只讀的采用utf8編碼的字節(jié)切片(slice) 因此用len函數(shù)獲取到的長度并不是字符個數(shù),而是字節(jié)個數(shù)。 for循環(huán)遍歷輸出的也是各個字節(jié)。runerune是int32的別名,代表字符的Unicode編碼,采用4個字

解釋

String

Go語言中,string就是只讀的采用utf8編碼的字節(jié)切片(slice) 因此用len函數(shù)獲取到的長度并不是字符個數(shù),而是字節(jié)個數(shù)。 for循環(huán)遍歷輸出的也是各個字節(jié)。y5w28資訊網(wǎng)——每日最新資訊28at.com

rune

rune是int32的別名,代表字符的Unicode編碼,采用4個字節(jié)存儲,將string轉(zhuǎn)成rune就意味著任何一個字符都用4個字節(jié)來存儲其unicode值,這樣每次遍歷的時候返回的就是unicode值,而不再是字節(jié)了,這樣就可以解決亂碼問題了y5w28資訊網(wǎng)——每日最新資訊28at.com

byte

bytes操作的對象也是字節(jié)切片,與string的不可變不同,byte是可變的,因此string按增量方式構(gòu)建字符串會導(dǎo)致多次內(nèi)存分配和復(fù)制,使用bytes就不會因而更高效一點(diǎn)y5w28資訊網(wǎng)——每日最新資訊28at.com

轉(zhuǎn)換方式

String、bytes 相互轉(zhuǎn)換

String to bytes

func main() { str := "Hello, Golang!" fmt.Println(string2bytes1(str)) fmt.Println(string2bytes2(str)) fmt.Println(string2bytes3(str))}func string2bytes1(str string) []byte { bs := make([]byte, 0) for i := 0; i < len(str); i++ {  bs = append(bs, str[i]) } return bs}func string2bytes2(str string) []byte { return []byte(str)}func string2bytes3(s string) []byte { sh := (*reflect.StringHeader)(unsafe.Pointer(&s)) bh := reflect.SliceHeader{  Data: sh.Data,  Len:  sh.Len,  Cap:  sh.Len, } return *(*[]byte)(unsafe.Pointer(&bh))}

前兩個方法是非常標(biāo)準(zhǔn)的轉(zhuǎn)換方式,第三種方式使用了 unsafe 和 reflect 處理,是個不安全的做法,而且 StringHeader 在我使用的 1.21 已經(jīng)廢棄了。y5w28資訊網(wǎng)——每日最新資訊28at.com

bytes to String

func main() { str := "Hello, Golang!" bs := string2bytes3(str) fmt.Println(bytes2string1(bs)) fmt.Println(bytes2string2(bs))}func bytes2string1(bs []byte) string { return string(bs)}func bytes2string2(bs []byte) string { return *(*string)(unsafe.Pointer(&bs))}

第一種轉(zhuǎn)換也是一個非常標(biāo)準(zhǔn)的轉(zhuǎn)換方式,第二個方式使用了不安全的做法。y5w28資訊網(wǎng)——每日最新資訊28at.com

String、rune 相互轉(zhuǎn)換

String to rune

func main() { str := "Hello, 中國!" fmt.Println(string2rune1(str)) fmt.Println(string2rune2(str))}func string2rune1(str string) []rune { rs := make([]rune, 0) for _, r := range str {  rs = append(rs, r) } return rs}func string2rune2(str string) []rune { return []rune(str)}

這里的 for range 和上面 for index 是不一樣的,索引字符串產(chǎn)生字節(jié)。For range 循環(huán)每次迭代都會解碼一個 UTF-8 編碼的符文,因此值類型是 rune。y5w28資訊網(wǎng)——每日最新資訊28at.com

rune to String

func main() { str := "Hello, 中國!" rs := string2rune2(str) fmt.Println(rune2string1(rs))}func rune2string1(rs []rune) string { return string(rs)}

rune、bytes 相互轉(zhuǎn)換

[]rune 和 []byte 的相互轉(zhuǎn)換需要先轉(zhuǎn)成字符串再轉(zhuǎn)換。y5w28資訊網(wǎng)——每日最新資訊28at.com

func main() { str := "Hello, 中國!" rs := string2rune1(str) bs := string2bytes1(str) convertedBytes := rune2bytes(rs) convertedRunes := bytes2rune(bs) fmt.Println(bs) fmt.Println(convertedBytes) fmt.Println(rs) fmt.Println(convertedRunes)}func rune2bytes(rs []rune) []byte { return []byte(string(rs))}func bytes2rune(bs []byte) []rune { return []rune(string(bs))}

總結(jié)

希望大家通過這篇文章可以鞏固自己對這幾種類型的理解,以及更方便的對它們進(jìn)行轉(zhuǎn)換。y5w28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-15230-0.htmlGolang 中的 String、rune 和 byte,你了解了嗎?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 狀態(tài)模式:對象狀態(tài)的變化,你學(xué)會了嗎?

下一篇: 純前端也可以訪問文件系統(tǒng)!

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 俄羅斯:將審查iPhone等外國公司設(shè)備 保數(shù)據(jù)安全

    iPhone和特斯拉都屬于在各自領(lǐng)域領(lǐng)頭羊的品牌,推出的產(chǎn)品也也都是數(shù)一數(shù)二的,但對于一些國家而言,它們的產(chǎn)品可靠性和安全性還是在限制范圍內(nèi)。近日,俄羅斯聯(lián)邦通信、信息技術(shù)
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進(jìn)行反混淆,尤其是使用自定義混淆器對其進(jìn)行混淆時。什么是混
  • 十個可以手動編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進(jìn)行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 一篇聊聊Go錯誤封裝機(jī)制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • Flowable工作流引擎的科普與實(shí)踐

    一.引言當(dāng)我們在日常工作和業(yè)務(wù)中需要進(jìn)行各種審批流程時,可能會面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動處理這些審批流程可能會導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這
  • 量化指標(biāo)是與非:挽救被量化指標(biāo)扼殺的技術(shù)團(tuán)隊(duì)

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術(shù)總監(jiān)劉新翠在WOT2023大會上的主題分享,更多精彩內(nèi)容及現(xiàn)場PPT,請關(guān)注51CTO技術(shù)棧公眾號,發(fā)消息【W(wǎng)OT2023PPT】即可直接領(lǐng)取
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網(wǎng)友或許聽過,但應(yīng)該不記得她是哪位主播了。其實(shí),作為曾經(jīng)的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現(xiàn)
  • 滴滴違法違規(guī)被罰80.26億 共存在16項(xiàng)違法事實(shí)

    滴滴違法違規(guī)被罰80.26億 存在16項(xiàng)違法事實(shí)開始于2121年7月,歷經(jīng)一年時間,網(wǎng)絡(luò)安全審查辦公室對“滴滴出行”網(wǎng)絡(luò)安全審查終于有了一個暫時的結(jié)束。據(jù)“網(wǎng)信
  • Windows 11發(fā)布,微軟一改往常對老機(jī)型開放的態(tài)度

    距離 Windows 11 發(fā)布已經(jīng)過去一周,在過去一周里,很多數(shù)碼愛好者圍繞其對 Android 應(yīng)用的支持、對老機(jī)型的升級問題展開了激烈討論。與以往不同的是,在這次大
Top