1 总体区别
在Golang中,byte和rune是两种不同类型的数据。简单来说,byte是一个8位的无符号整数类型,而rune则是一个32位的Unicode字符类型。
- Byte:
- 在Golang中,byte类型实际上是uint8的别名,它用来表示8位的无符号整数。通常用来存储ASCII字符以及二进制数据。
- 可以通过以下方式声明byte类型变量:
var b byte = 65
- Rune:
- 在Golang中,rune类型实际上是int32的别名,用于表示Unicode字符。这是因为Unicode字符可能需要多个字节来表示,因此需要更多的存储空间。
- 可以通过以下方式声明rune类型变量:
var r rune = '文'
总的来说,byte用于表示单个字节的数据,而rune用于表示Unicode字符,可以更好地支持多语言和复杂的文本处理。
2 常见错误
笔者在刷leecode在处理纯ASCII字符的时候,常常分不清什么时候用rune,什么时候用byte。便用一下代码总结。
如以下题目:
// 在不考虑效率的情况下,只是为了单纯的说明什么时候用rune,什么时候用byte
func isAnagram(s, t string) bool {
if len(s) != len(t) {
return false
}
sByte := []byte(s)
// sByte 是byte类型的数组,所以数组内每个子元素都是byte类型的
sMap := make(map[byte]int)
for _, b := range sByte {
sMap[b]++
}
// 而t是string类型,所以此时返回的b其实是Unicode字符,可以理解为rune类型
// 所以此时b就需要类型转换为byte
for _, b := range t {
if sMap[byte(b)] <= 0 {
return false
}
sMap[byte(b)]--
}
return true
}