golang byte和rune的区别 或者是string知识

2024-05-14 02:58

本文主要是介绍golang byte和rune的区别 或者是string知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

golang byte和rune的区别

原创  2018年01月19日 15:46:16
  • 549

       我们知道golang中的string类型存储的字符串是不可变的, 如果要修改string内容需要将string转换为[]byte或[]rune,并且修改后的string内容是重新分配的。

       那么byte和rune的区别是什么呢?其实很简单,直接看golang源码既可:


    一个是uint8、一个是uint32。就这么简单~。

    所以二者的却别也不言而喻了,一个里面只能填充uint8的值、另一个可以填充uint32的值。


Golang string 笔记


Golang 中的字符串,有两种表示方法:

s1 := "hello, world"
s2 := `hello, world.
send using Golang`

Golang 中没有字符类型(就是 C 中的 char),字符串都是 rune 类型。Golang 中字符串以 UTF-8 编码后存储,存储的是字节。

UTF-8 实际是上一种变长编码,一个字符(一个中文字或其他语言的文字)可能以 1 个、2 个或 3 个字节来存储。作为对比,一个 ASCII 字符只需要一个字节,当然 ASCII 可以表示的字符就比较有限了。

在 Golang 中,字符串的内容一但被创建,是不能被修改的。如果需要修改字符串,可以将字符串转换为 []byte 或者 []rune。需要特别指出的一点是在使用 for ... range 遍历字符串中的字符时,Golang 会自动将 string 转换为 []rune,然后再遍历字符串。例如:

 s := "hello 世界"
for i, v := range s {fmt.Printf("%v = %c\n", i, v)
}

输出:

0 = h
1 = e
2 = l
3 = l
4 = o
5 =  
6 = 世
9 = 界

len(s) 返回的是字符串 s 的字节数。


这篇关于golang byte和rune的区别 或者是string知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987565

相关文章

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

java String.join()的使用小结

《javaString.join()的使用小结》String.join()是Java8引入的一个实用方法,用于将多个字符串按照指定分隔符连接成一个字符串,本文主要介绍了javaString.join... 目录1. 方法定义2. 基本用法2.1 拼接多个字符串2.2 拼接集合中的字符串3. 使用场景和示例3

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程