欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

golang的字符有如下兩種:

  • 一種是 uint8['ju:n?t] 類型叫做 byte 型,代表了 ASCII 碼的一個字符。
  • 另一種是 rune[ru?n] 類型,代表一個 UTF-8 字符,當(dāng)需要處理中文、日文或者其他復(fù)合字符時,則需要用到 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)
}

// 結(jié)果如下
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、遍歷打印一個字符串,當(dāng)使用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")
    }
}

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

?

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

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

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

104
101
108
108
111
32
19990
30028

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

四、go 語言字符串修改

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

在go中修改字符串,需要先將字符串轉(zhuǎn)化成數(shù)組,[]byte[]rune,然后再轉(zhuǎn)換成 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))
}

// 結(jié)果如下
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))
}

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

相關(guān)文章

  • golang文件內(nèi)容覆蓋問題的分析及解決

    golang文件內(nèi)容覆蓋問題的分析及解決

    通過golang讀取數(shù)據(jù)庫站點映射配置,生成nginx conf文件,并檢查和重啟nginx服務(wù),已達到站點自動化部署目的,當(dāng)目標文件中內(nèi)容很長,而寫入的內(nèi)容很短時,目標文件內(nèi)容無法完全覆蓋,本文給大家介紹了解決方法,需要的朋友可以參考下
    2024-01-01
  • Go語言指針訪問結(jié)構(gòu)體的方法

    Go語言指針訪問結(jié)構(gòu)體的方法

    這篇文章主要介紹了Go語言指針訪問結(jié)構(gòu)體的方法,涉及Go語言指針及結(jié)構(gòu)體的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言實現(xiàn)MapReduce的示例代碼

    Go語言實現(xiàn)MapReduce的示例代碼

    MapReduce是一種備受歡迎的編程模型,它最初由Google開發(fā),用于并行處理大規(guī)模數(shù)據(jù)以提取有價值的信息,本文將使用GO語言實現(xiàn)一個簡單的MapReduce,需要的可以參考下
    2023-10-10
  • Go語言中的并發(fā)模式你了解了嗎

    Go語言中的并發(fā)模式你了解了嗎

    工作中查看項目代碼,發(fā)現(xiàn)會存在使用?GO?語言做并發(fā)的時候出現(xiàn)各種各樣的異常情況,實際上,出現(xiàn)上述的情況,還是因為我們對于?GO?語言的并發(fā)模型和涉及的?GO?語言基礎(chǔ)不夠扎實,所以本文小編就來帶大家深入了解下Go語言中的并發(fā)模式吧
    2023-08-08
  • Go雪花算法的作用領(lǐng)域及實現(xiàn)方法示例

    Go雪花算法的作用領(lǐng)域及實現(xiàn)方法示例

    這篇文章主要為大家介紹了Go雪花算法的作用領(lǐng)域及實現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 詳解go?mod?使用方法

    詳解go?mod?使用方法

    golang 提供了 go mod命令來管理包,是go的一個模塊管理工具,用來代替?zhèn)鹘y(tǒng)的GOPATH方案,本文給大家介紹go?mod?使用方法,感興趣的朋友一起看看吧
    2022-05-05
  • golang 實現(xiàn)一個負載均衡案例(隨機,輪訓(xùn))

    golang 實現(xiàn)一個負載均衡案例(隨機,輪訓(xùn))

    這篇文章主要介紹了golang 實現(xiàn)一個負載均衡案例(隨機、輪訓(xùn)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go文件操作(新建打開寫入讀取刪除關(guān)閉)學(xué)習(xí)筆記

    Go文件操作(新建打開寫入讀取刪除關(guān)閉)學(xué)習(xí)筆記

    這篇文章主要為大家介紹了Go文件操作(新建打開寫入讀取刪除關(guān)閉)學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言對接微信支付與退款指南(示例詳解)

    Go語言對接微信支付與退款指南(示例詳解)

    在互聯(lián)網(wǎng)技術(shù)日益發(fā)展的背景下,Go語言憑借并發(fā)處理能力,在后端開發(fā)中大放異彩,本文詳細介紹如何使用Go語言對接微信支付,完成支付和退款功能,包括準備工作、初始化微信支付客戶端、實現(xiàn)支付功能,以及處理支付回調(diào)和退款等
    2024-10-10
  • Go Web框架gin的入門教程

    Go Web框架gin的入門教程

    本篇文章主要介紹了Go Web框架gin的入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05

最新評論