go中rune和byte的用處


參考:https://www.jianshu.com/p/4fbf529926ca

rune是用來區分字符值和整數值的

  • byte 等同於int8,即一個字節長度,常用來處理ascii字符
  • rune 等同於int32,即4個字節長度,常用來處理unicode或utf-8字符

舉例說明:

package main

import (
    "fmt"
)


func main() {
    str := "你好 world"
    fmt.Printf("len(str):%d\n", len(str)) //返回len(str):12
}

返回值為12是因為中文字符在unicode下占2個字節,在utf-8編碼下占3個字節,而golang默認編碼正好是utf-8。

所以上面例子中的"你好"占據了六個字節

但是其實我們期望得到的結果是8,即不以字節數來計算長度,而是以字符數來計算長度

解決的辦法就是將該string轉成rune類型,rune類型為int32,即4個字節,能夠很好地將utf-8編碼下三字節長度的中文字符保存進來,這樣就能夠得到長度為8的值了

package main

import (
    "fmt"
)


func main() {
    str := "你好 world"
    fmt.Printf("len(str):%d\n", len(str)) //返回len(str):12
    fmt.Printf("len(rune(str)):%d\n", len([]rune(str))) //len(rune(str)):8
}

同理可知,其實byte也是為了解決字符的問題,只是它是用來解決ascii字符的,所以長度短一些,為int8

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM