今天是golang专题的第6篇文章,这篇主要和大家聊聊golang当中的字符串的使用。
字符串定义
golang当中的字符串本质是只读的字符型数组,和C语言当中的char[]类似,但是golang为它封装了一个变量类型,叫做string。知道了string这个类型之后,我们就可以很方便地来初始化:
var str stringstr1 := "hello world"var str2 = "hello world too"
这里应该没什么难度,很好理解。由于这个数组是只读的,所以我们可以通过下标获取某一位的字符,但是不允许修改。
// 允许fmt.Println(str1[3])// 错误str1[3] = 'l'
这个也不是golang的独创,很多语言当中都有这个限制,因为会将字符串作为const类型存储在专门的区域。所以不允许字符串进行修改,比如Python也是如此。
除了像是数组一样,支持下标的访问之外,go中的字符串还支持拼接以及求长度的操作。我们可以用len函数获取一个字符串的长度,用+来表示字符串的拼接:
len("hello")// 5c := "hello" + "world"// c="helloworld"
这些本来也属于常规操作,并不值得一提,但是关于len函数,值得仔细说说。这里有一个坑,关于utf-8编码。我们来看下面这个例子:
str := "hello 世界"fmt.Println(len(str))
按照我们的设想,它返回的应该是8,但是实际上我们这么操作会得到12。原因很简单,因为在utf-8编码当中,一个汉字需要3个字节编码。那如果我们想要得到字符串本身的长度,而不是字符串占据的字节数,应该怎么办呢?这个时候,我们需要用到一个新的结构叫做rune,它表示单个Unicode字符。
所以我们可以将string转化成rune数组,之后再来计算长度,得到的结果就准确了。
str := "hello 世界"fmt.Println(len([]rune(str)))
这样我们得到的结果就是8了,和我们预期一致了。如果你在使用golang的时候,需要用到utf-8编码,一定要小心。
类型转换
golang当中的字符串不像Java或者其