Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > go字符类型byte 与 rune

go 语言字符类型 byte 与 rune案例详解

作者:岳来

这篇文章主要介绍了go 语言字符类型 byte 与 rune案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

golang的字符有如下两种:

一、byte类型介绍

byte 类型是 uint8 的别名,可以表达只占用 1 个字节的传统 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类型介绍

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个字节组成,而字符串是由byte字节组成,所以长度也是byte字符长度,这样遍历时遇到中文就乱码了。

3.2、使用rune 类型来遍历字符串

在 Go 中,有一个遍历方式是 range,它默认就是以 UTF-8 编码形式去读每一个字符。当涉及到的字符串中含有非英文字符时,可以使用 range 来遍历:

104
101
108
108
111
32
19990
30028

此时输出的字节编码就是 UTF-8 编码号,UTF-8 编码是包含 ASCII 编码的,所以前 6 个编号还是一样的,后面两个编号分别代表世,界。

四、go 语言字符串修改

所谓对字符串的修改其实不是对字符串本身的修改,而是复制字符串,同时修改值,即重新分配来内存。

在go中修改字符串,需要先将字符串转化成数组,[]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 语言字符类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文