LiSheng's blog LiSheng's blog
首页
笔记
个人简历
随笔集
GitHub (opens new window)
首页
笔记
个人简历
随笔集
GitHub (opens new window)
  • golang

    • 并发编程

      • GMP并发模型
      • 锁相关
      • groutine并发相关
      • go如何实现原子操作
    • 内存管理

    • 数组和切片的区别
    • new和make
    • go defer
    • context
    • channel
    • go map
    • interface
    • 对象系统
    • rune 类型
      • 字符串拼接的几种方式
    • cplus

    • leetcode

    • 存储技术

    • 分布式系统

    • 计算机网络

    • Linux操作系统

    • Redis

    • 其他

    • 笔记
    • golang
    lisheng
    2024-09-10
    目录

    rune 类型

    在 Go 语言中,rune 是一种表示 Unicode 字符的类型。实际上,rune 是 int32 的别名,用于表示 Unicode 字符集中的一个字符。这使得 rune 可以用来处理任意 Unicode 字符,而不仅仅是 ASCII 字符。

    # rune 的基本概念

    • 定义:rune 是 int32 类型的别名。它的值范围是从 0 到 0x10FFFF(Unicode 字符的最大值),也包括一些控制字符。
    • 用途:rune 常用于表示单个字符,特别是在处理多字节字符时。例如,中文、日文等字符通常采用多个字节表示,而 rune 可以很好地处理这些字符。

    # 使用示例

    以下是一个使用 rune 的简单示例:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var ch rune = 'a' // 使用单引号表示单个字符
    	fmt.Printf("rune: %c, Unicode: %U\n", ch, ch)
    
    	var ch2 rune = '中' // 中文字符
    	fmt.Printf("rune: %c, Unicode: %U\n", ch2, ch2)
    
    	// 遍历字符串中的字符
    	str := "Hello, 世界"
    	for _, r := range str {
    		fmt.Printf("Character: %c, Unicode: %U\n", r, r)
    	}
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    # 输出结果

    rune: a, Unicode: U+0061
    rune: 中, Unicode: U+4E2D
    Character: H, Unicode: U+0048
    Character: e, Unicode: U+0065
    Character: l, Unicode: U+006C
    Character: l, Unicode: U+006C
    Character: o, Unicode: U+006F
    Character: ,, Unicode: U+002C
    Character:  , Unicode: U+0020
    Character: 世, Unicode: U+4E16
    Character: 界, Unicode: U+754C
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    # 注意事项

    1. 字符串与 rune:在 Go 中,字符串是以字节的切片表示的,而 rune 是以 Unicode 字符的切片表示的。当遍历字符串时,使用 for range 可以安全地获取到每一个字符对应的 rune 值。

    2. 内存占用:由于 rune 是 int32 类型,单个 rune 占用 4 个字节,而不是 1 个字节(如 byte)。在处理大文本或大量字符时,需要注意内存占用。

    3. 对比和转换:可以使用 string(r) 将 rune 转换为字符串,反之则使用 []rune(str) 将字符串转换为 rune 切片。

    4. 处理unicode或utf-8字符: 相当int32golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8

    5. byte 等同于int8,常用来处理ascii字符

    6. rune 等同于int32,常用来处理unicode或utf-8字符

    编辑 (opens new window)
    上次更新: 2024/09/13, 11:59:12
    对象系统
    字符串拼接的几种方式

    ← 对象系统 字符串拼接的几种方式→

    最近更新
    01
    ceph分布式存储-对象存储(RGW)搭建
    10-27
    02
    ceph分布式存储-集群客户端连接
    10-27
    03
    ceph分布式存储-管理crushmap
    10-27
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式