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

Posted hongmingover

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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知识的主要内容,如果未能解决你的问题,请参考以下文章

golang之基本数据类型

golang中的interface{}转其他类型

Go语言中的byte和rune区别对比

golang unicode/utf8源码分析

Python 程序员的 Golang 学习指南(III): 入门篇

GOLANG 基本数据类型 整型