Go微服务实战
上QQ阅读APP看书,第一时间看更新

3.1 字符串和数组

字符串和数组,包括3.2节要介绍的slice(切片)在Go语言的底层存储上都是一样的(如图3-1所示),只是在语法层面存在着不同。

数组是具有一定长度且元素数据类型相同的序列。注意,在Go语言里面,数据的长度是固定的。当我们把数组a赋值给数组b的时候,这是值的完全复制,并不是其他语言中引用的传递,所以为了提高此方面的性能要用到指针。但实际操作中一般用slice,因为slice更为灵活。

字符串就是一种特殊的数组,特殊之处在于字符串是只读的。数组的长度虽然是固定的,但我们可以通过下标的方式,比如a[i],进行值的读写,使具体元素值发生变化。而字符串的长度和具体元素值都是不可变的,字符串可以理解为固定长度且元素不可变的字节数组。字符串的赋值是需要注意的地方,比如在对s1和s2这两个字符串进行s1=s2的赋值操作时,本质不会进行赋值,仅会传递字符串的地址和字节长度,因为字符串不可变,就没必要再复制一份了。