golang byte和rune的区别 或者是string知识
Posted hongmingover
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang byte和rune的区别 或者是string知识相关的知识,希望对你有一定的参考价值。
golang byte和rune的区别
原创 2018年01月19日 15:46:16我们知道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知识的主要内容,如果未能解决你的问题,请参考以下文章