golang 把字符类型单独分离出来, 而且使用了不一样的语法:程序员
var char = '这'
而用 fmt.Printf("%T", char) 查看其类型, 居然是 int32 这让人奇怪, 一般字符组成了字符串, 字符串若是只有一个字符长度的话, 应当就是字符. 但 golang 的作法改变了这种一般的观点:golang
字符是数字类型, 若是要合并一个字符到字符串中, 该怎么办呢?函数
str := string(char)
golang 预约义了 rune, byte 两种和字符有关的类型,但在显示的时候, 却改了名字:学习
var x byte fmt.Printf("x is %T", x) // x is int8 var y rune fmt.Printf("y is %T", y) // y is int32
这彷佛没有必要定义这两种类型, 由于 golang 本身的内置函数根本就忽略了它.编码
另外 golang 和字符串有关的类型也比较混乱, 有 string, []byte, []rune. 和 string 有关的 strings 模块的输入数据类型大部分是 []string. 而由此引起的数据流就更加混乱, 读出的字符串有各类格式.code
不过 golang 提供了内置函数对这些数据类型进行相互转换:图片
var str = "这里输入代码" var chars = []rune(str) var bytes = []byte(str) // 这里就乱了, 由于 unicode 字符被 asc 编码了
我想, golang 搞了这么多类型来处理字符串是基于效率的考虑:unicode
总之, 学习 golang 的字符串, 就要明白, 传递一个大字符串, 最好用引用类型, 而处理一个小字符串, 使用切片就会变得繁琐.字符串
如何在编码效率和执行效率之间取得平衡, 就由程序员本身选择吧.string