golang中byte和rune用法及新手易錯點(diǎn)總結(jié)
1 總體區(qū)別
在Golang中,byte和rune是兩種不同類型的數(shù)據(jù)。簡單來說,byte是一個8位的無符號整數(shù)類型,而rune則是一個32位的Unicode字符類型。
- Byte:
- 在Golang中,byte類型實際上是uint8的別名,它用來表示8位的無符號整數(shù)。通常用來存儲ASCII字符以及二進(jìn)制數(shù)據(jù)。
- 可以通過以下方式聲明byte類型變量:
var b byte = 65
- Rune:
- 在Golang中,rune類型實際上是int32的別名,用于表示Unicode字符。這是因為Unicode字符可能需要多個字節(jié)來表示,因此需要更多的存儲空間。
- 可以通過以下方式聲明rune類型變量:
var r rune = '文'
總的來說,byte用于表示單個字節(jié)的數(shù)據(jù),而rune用于表示Unicode字符,可以更好地支持多語言和復(fù)雜的文本處理。
2 常見錯誤
筆者在刷leecode在處理純ASCII字符的時候,常常分不清什么時候用rune,什么時候用byte。便用一下代碼總結(jié)。
如以下題目:

// 在不考慮效率的情況下,只是為了單純的說明什么時候用rune,什么時候用byte
func isAnagram(s, t string) bool {
if len(s) != len(t) {
return false
}
sByte := []byte(s)
// sByte 是byte類型的數(shù)組,所以數(shù)組內(nèi)每個子元素都是byte類型的
sMap := make(map[byte]int)
for _, b := range sByte {
sMap[b]++
}
// 而t是string類型,所以此時返回的b其實是Unicode字符,可以理解為rune類型
// 所以此時b就需要類型轉(zhuǎn)換為byte
for _, b := range t {
if sMap[byte(b)] <= 0 {
return false
}
sMap[byte(b)]--
}
return true
}總結(jié)
到此這篇關(guān)于golang中byte和rune用法及新手易錯點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)golang byte和rune內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解prometheus監(jiān)控golang服務(wù)實踐記錄
這篇文章主要介紹了詳解prometheus監(jiān)控golang服務(wù)實踐記錄,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
如何使用go實現(xiàn)創(chuàng)建WebSocket服務(wù)器
文章介紹了如何使用Go語言和gorilla/websocket庫創(chuàng)建一個簡單的WebSocket服務(wù)器,并實現(xiàn)商品信息的實時廣播,感興趣的朋友一起看看吧2024-11-11
源碼剖析Golang中map擴(kuò)容底層的實現(xiàn)
之前的文章詳細(xì)介紹過Go切片和map的基本使用,以及切片的擴(kuò)容機(jī)制。本文針對map的擴(kuò)容,會從源碼的角度全面的剖析一下map擴(kuò)容的底層實現(xiàn),需要的可以參考一下2023-03-03

