最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go 語(yǔ)言字符類型 byte 與 rune案例詳解

 更新時(shí)間:2023年03月01日 14:36:31   作者:岳來(lái)  
這篇文章主要介紹了go 語(yǔ)言字符類型 byte 與 rune案例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

golang的字符有如下兩種:

  • 一種是 uint8['ju:n?t] 類型叫做 byte 型,代表了 ASCII 碼的一個(gè)字符。
  • 另一種是 rune[ru?n] 類型,代表一個(gè) UTF-8 字符,當(dāng)需要處理中文、日文或者其他復(fù)合字符時(shí),則需要用到 rune 類型。rune 類型等價(jià)于 int32 類型。

一、byte類型介紹

byte 類型是 uint8 的別名,可以表達(dá)只占用 1 個(gè)字節(jié)的傳統(tǒng) ASCII 編碼的字符,例如 var c byte = 'A'

用單引號(hào)括起來(lái)的單個(gè)字符是字符類型,用雙引號(hào)括起來(lái)的字符是字符串類型

package main

import "fmt"

func main(){
    var c byte = 'A'
    fmt.Println(c)
    fmt.Printf("%T ",c)
    fmt.Printf("\n")
    var d rune = 'A'
    fmt.Println(d)
    fmt.Printf("%T ",d)
    // var e byte = 'AB' // more than one character in rune literal
    // var e rune = 'AB'  // more than one character in rune literal
    var e string = "AB"
    fmt.Println(e)
    fmt.Printf("%T ",e)
    fmt.Printf("\n")
    var f byte = 'C'
    println(f)
    f = 88
    println(f)
}

// 結(jié)果如下
65
uint8 
65
int32 
AB
string 
67
88

二、rune類型介紹

  • 在書寫 Unicode 字符時(shí),需要在 16 進(jìn)制數(shù)之前加上前綴\u或者\U
  • Unicode 至少占用 2 個(gè)字節(jié),所以我們使用 int16 或者 int 類型來(lái)表示。
  • 需要使用到 4 字節(jié),則使用\u前綴,如果需要使用到 8 個(gè)字節(jié),則使用\U前綴。
var h int = '\u0041'
fmt.Println(h)   // 65
var i int = '\U00000041'
fmt.Println(i)   // 65

三、遍歷含有中文(Unicode)時(shí)差異

3.1、遍歷打印一個(gè)字符串,當(dāng)使用byte類型時(shí):

package main

import "fmt"

func main(){
    str:="hello 世界"
    for i:=0;i<len(str);i++{
        fmt.Printf("%c",str[i]) // hello ???
        fmt.Printf("\n")
    }
}

// 結(jié)果如下:
h
e
l
l
o
 
?
?

?

上面結(jié)果,英文字符正確打印,但中文亂碼。是因?yàn)閁TF8編碼下一個(gè)中文漢字由3~4個(gè)字節(jié)組成,而字符串是由byte字節(jié)組成,所以長(zhǎng)度也是byte字符長(zhǎng)度,這樣遍歷時(shí)遇到中文就亂碼了。

3.2、使用rune 類型來(lái)遍歷字符串

在 Go 中,有一個(gè)遍歷方式是 range,它默認(rèn)就是以 UTF-8 編碼形式去讀每一個(gè)字符。當(dāng)涉及到的字符串中含有非英文字符時(shí),可以使用 range 來(lái)遍歷:

104
101
108
108
111
32
19990
30028

此時(shí)輸出的字節(jié)編碼就是 UTF-8 編碼號(hào),UTF-8 編碼是包含 ASCII 編碼的,所以前 6 個(gè)編號(hào)還是一樣的,后面兩個(gè)編號(hào)分別代表世,界。

四、go 語(yǔ)言字符串修改

所謂對(duì)字符串的修改其實(shí)不是對(duì)字符串本身的修改,而是復(fù)制字符串,同時(shí)修改值,即重新分配來(lái)內(nèi)存。

在go中修改字符串,需要先將字符串轉(zhuǎn)化成數(shù)組,[]byte[]rune,然后再轉(zhuǎn)換成 string型。

4.1、對(duì)于全是ASCII編碼的字符串:

package main

import "fmt"

func main(){
    str:="hello"
    fmt.Println(str)
    s1:=[]byte(str)
    s1[0]='H'
    fmt.Println(string(s1))
}

// 結(jié)果如下
hello
Hello

4.2、對(duì)于包含非ASCII編碼的字符串:

package main

import "fmt"

func main(){
    str01:="hello 世界"
    fmt.Println(str01)
    s2:=[]rune(str01)
    s2[0]='H'
    fmt.Println(string(s2))
}

// 結(jié)果如下
hello 世界
Hello 世界

參考文檔

1、https://blog.csdn.net/AXIMI/article/details/120379225
2、https://lesscode.work/sections/62b076e9d22ba.html
3、https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624
4、https://www.cnblogs.com/wjaaron/p/14822799.html
5、https://www.bbsmax.com/A/D854aVKpdE/

到此這篇關(guān)于go 語(yǔ)言字符類型 byte 與 rune案例詳解的文章就介紹到這了,更多相關(guān)go 語(yǔ)言字符類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決panic: assignment to entry in nil map問(wèn)題

    解決panic: assignment to entry in nil

    這篇文章主要介紹了解決panic: assignment to entry in nil map問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2008-01-01
  • go的defer和閉包示例說(shuō)明(非內(nèi)部實(shí)現(xiàn))

    go的defer和閉包示例說(shuō)明(非內(nèi)部實(shí)現(xiàn))

    這篇文章主要為大家介紹了go的defer和閉包示例說(shuō)明(非內(nèi)部實(shí)現(xiàn)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • go?sync包中的互斥鎖Mutex和等待組WaitGroup使用詳解

    go?sync包中的互斥鎖Mutex和等待組WaitGroup使用詳解

    這篇文章主要為大家介紹了go?sync包中的互斥鎖Mutex和等待組WaitGroup使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • golang執(zhí)行命令獲取執(zhí)行結(jié)果狀態(tài)(推薦)

    golang執(zhí)行命令獲取執(zhí)行結(jié)果狀態(tài)(推薦)

    這篇文章主要介紹了golang執(zhí)行命令獲取執(zhí)行結(jié)果狀態(tài)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-11-11
  • 在Go中編寫測(cè)試代碼的方法總結(jié)

    在Go中編寫測(cè)試代碼的方法總結(jié)

    在程序開發(fā)過(guò)程中,測(cè)試是非常重要的一環(huán),甚至有一種開發(fā)模式叫?TDD,先編寫測(cè)試,再編寫功能代碼,通過(guò)測(cè)試來(lái)推動(dòng)整個(gè)開發(fā)的進(jìn)行,可見測(cè)試在開發(fā)中的重要程度,為此,Go提供了testing框架來(lái)方便我們編寫測(cè)試,本文將向大家介紹在Go中如何編寫測(cè)試代碼
    2023-07-07
  • Go語(yǔ)言字符串操作指南:簡(jiǎn)單易懂的實(shí)戰(zhàn)技巧

    Go語(yǔ)言字符串操作指南:簡(jiǎn)單易懂的實(shí)戰(zhàn)技巧

    本文將介紹Go語(yǔ)言中字符串的實(shí)戰(zhàn)操作,通過(guò)本文的學(xué)習(xí),讀者將掌握Go語(yǔ)言中字符串的常用操作,為實(shí)際開發(fā)提供幫助,需要的朋友可以參考下
    2023-10-10
  • Golang 探索對(duì)Goroutine的控制方法(詳解)

    Golang 探索對(duì)Goroutine的控制方法(詳解)

    下面小編就為大家分享一篇Golang 探索對(duì)Goroutine的控制方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 聊聊golang的defer的使用

    聊聊golang的defer的使用

    這篇文章主要介紹了聊聊golang的defer的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • go語(yǔ)言中int和byte轉(zhuǎn)換方式

    go語(yǔ)言中int和byte轉(zhuǎn)換方式

    這篇文章主要介紹了go語(yǔ)言中int和byte轉(zhuǎn)換方式,需要的朋友可以參考下
    2018-11-11
  • 解析Go語(yǔ)言編程中的struct結(jié)構(gòu)

    解析Go語(yǔ)言編程中的struct結(jié)構(gòu)

    這篇文章主要介紹了Go語(yǔ)言編程中的struct結(jié)構(gòu),是Go語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10

最新評(píng)論

扶沟县| 商水县| 大安市| 门头沟区| 长泰县| 焦作市| 阿拉善左旗| 玉树县| 汕尾市| 天峻县| 时尚| 永清县| 疏附县| 临泉县| 新巴尔虎右旗| 会理县| 绵竹市| 榆林市| 吴堡县| 琼海市| 塔河县| 阿图什市| 虹口区| 峡江县| 新乡县| 金川县| 共和县| 岳西县| 于都县| 瑞昌市| 景德镇市| 措美县| 湖州市| 仁寿县| 曲阜市| 明水县| 霍城县| 东乌| 买车| 金寨县| 沿河|