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

go 語言字符類型 byte 與 rune案例詳解

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

golang的字符有如下兩種:

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

一、byte類型介紹

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

用單引號括起來的單個字符是字符類型,用雙引號括起來的字符是字符串類型

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

// 結果如下
65
uint8 
65
int32 
AB
string 
67
88

二、rune類型介紹

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

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

3.1、遍歷打印一個字符串,當使用byte類型時:

package main

import "fmt"

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

// 結果如下:
h
e
l
l
o
 
?
?

?

上面結果,英文字符正確打印,但中文亂碼。是因為UTF8編碼下一個中文漢字由3~4個字節(jié)組成,而字符串是由byte字節(jié)組成,所以長度也是byte字符長度,這樣遍歷時遇到中文就亂碼了。

3.2、使用rune 類型來遍歷字符串

在 Go 中,有一個遍歷方式是 range,它默認就是以 UTF-8 編碼形式去讀每一個字符。當涉及到的字符串中含有非英文字符時,可以使用 range 來遍歷:

104
101
108
108
111
32
19990
30028

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

四、go 語言字符串修改

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

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

4.1、對于全是ASCII編碼的字符串:

package main

import "fmt"

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

// 結果如下
hello
Hello

4.2、對于包含非ASCII編碼的字符串:

package main

import "fmt"

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

// 結果如下
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/

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

相關文章

  • 解決panic: assignment to entry in nil map問題

    解決panic: assignment to entry in nil

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

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

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

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

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

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

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

    在Go中編寫測試代碼的方法總結

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

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

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

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

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

    聊聊golang的defer的使用

    這篇文章主要介紹了聊聊golang的defer的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • go語言中int和byte轉換方式

    go語言中int和byte轉換方式

    這篇文章主要介紹了go語言中int和byte轉換方式,需要的朋友可以參考下
    2018-11-11
  • 解析Go語言編程中的struct結構

    解析Go語言編程中的struct結構

    這篇文章主要介紹了Go語言編程中的struct結構,是Go語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-10-10

最新評論

贺兰县| 博罗县| 乐平市| 温宿县| 克山县| 崇左市| 高陵县| 栾城县| 东明县| 马边| 丰顺县| 汉阴县| 南汇区| 宝丰县| 阳城县| 阜平县| 搜索| 平罗县| 托里县| 喀喇沁旗| 松阳县| 尉氏县| 辽阳市| 晋城| 平安县| 时尚| 银川市| 上蔡县| 梁平县| 临泉县| 土默特左旗| 农安县| 美姑县| 叙永县| 磴口县| 霍城县| 新源县| 临城县| 谷城县| 西贡区| 绍兴市|