服务端相关 / 13 Go 的字符类型

Go 语言的字符类型

字符类型在工作中也会非常频繁地用到,是一个非常重要的数据类型。本文主要介绍了 Go 语言中处理字符和字符串的数据类型。

1. 字符和字符串类型

序号 类型 说明
1 byte uint8 类型的别名,同等于 uint8。一般用于表示 ASCII 字符,即只能操作简单的字符,不支持中文操作
2 rune int32 类型的别名,同等于 int32。一般用于表示 Unicode 字符,即可以处理任何字符
3 string 一个指向 byte 数组的指针,可以为空字符串不可为nil

2. 代码演示

接下来使用一段代码来更清晰地解释byterune的区别,以及了解这三个类型的关系。

package main

import "fmt"

//将字符串转换为rune的数组,并替换数组第i个元素为ch
func str2Rune(str *string, i int, ch rune) {
    temp := []rune(*str)
    temp[i] = ch
    *str = string(temp)
}

//将字符串转换为byte的数组,并替换数组第i个元素为ch
func str2Byte(str *string, i int, ch byte) {
    temp := []byte(*str)
    temp[i] = ch
    *str = string(temp)
}

func main() {
    str := "你好 hello"
    str1 := "你好 hello"
    str2 := "你好 hello"
    str2Rune(&str, 0, 'A')  //将第0个字符替换为A
    str2Byte(&str1, 0, 'A') //将第0个字符替换为A
    str2Byte(&str2, 7, 'A') //将第7个字符替换为A
    fmt.Println("rune 数组处理中文后:", str)
    fmt.Println("byte 数组处理中文后:", str1)
    fmt.Println("byte 数组处理英文后:", str2)
}

输出结果:

图片描述

byte 和 rune 区别实例输出结果

结论:

  • string可以直接转换为rune或者byte数组;
  • runebyte可以互相转换;
  • byte 的操作单位是一个字节,可以理解为一个英文字符;
  • rune 的操作单位是一个字符,不管这个字符是什么字符。

3. 小结

本文主要学习了 Go 语言中的字符类型的使用,注意 byte 和 rune 使用上的区别。