日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

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

解釋

String

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

rune

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

byte

bytes操作的對象也是字節切片,與string的不可變不同,byte是可變的,因此string按增量方式構建字符串會導致多次內存分配和復制,使用bytes就不會因而更高效一點Hmw28資訊網——每日最新資訊28at.com

轉換方式

String、bytes 相互轉換

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))}

前兩個方法是非常標準的轉換方式,第三種方式使用了 unsafe 和 reflect 處理,是個不安全的做法,而且 StringHeader 在我使用的 1.21 已經廢棄了。Hmw28資訊網——每日最新資訊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))}

第一種轉換也是一個非常標準的轉換方式,第二個方式使用了不安全的做法。Hmw28資訊網——每日最新資訊28at.com

String、rune 相互轉換

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 是不一樣的,索引字符串產生字節。For range 循環每次迭代都會解碼一個 UTF-8 編碼的符文,因此值類型是 rune。Hmw28資訊網——每日最新資訊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 相互轉換

[]rune 和 []byte 的相互轉換需要先轉成字符串再轉換。Hmw28資訊網——每日最新資訊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))}

總結

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

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

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

上一篇: 狀態模式:對象狀態的變化,你學會了嗎?

下一篇: 純前端也可以訪問文件系統!

標簽:
  • 熱門焦點
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰略發布會結束之后,Redmi總經理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • K60至尊版狂暴引擎2.0加持:超177萬跑分斬獲性能第一

    Redmi的后性能時代戰略發布會今天下午如期舉辦,在本次發布會上,Redmi公布了多項關于和聯發科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 華為Mate60系列模具曝光:采用碩大圓形后置相機模組+拼接配色方案

    據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將迎來更新,有望在9-10月份帶來全新的華為Mate60
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
Top 主站蜘蛛池模板: 永胜县| 宁都县| 岳池县| 外汇| 梅州市| 阿合奇县| 平南县| 麻栗坡县| 怀远县| 惠安县| 阜阳市| 交口县| 井陉县| 界首市| 新郑市| 东海县| 靖州| 如皋市| 西乌珠穆沁旗| 绥德县| 涿鹿县| 鄱阳县| 枣阳市| 西藏| 自治县| 威远县| 三亚市| 紫阳县| 旺苍县| 台北市| 沙洋县| 民勤县| 且末县| 台湾省| 观塘区| 临安市| 屯门区| 定日县| 辉南县| 固安县| 阿拉善左旗|