a := [2]string{"1","2"}
b := [2]int{1,2}
fmt.Printf("a[0]:%p,a[1]:%p\n",&a[0],&a[1])
fmt.Printf("b[0]:%p,b[1]:%p",&b[0],&b[1])
上述输出结果为下面
a[0]:0xc000004480,a[1]:0xc000004490 b[0]:0xc00000a130,b[1]:0xc00000a138
由输出结果可以看出来,int类型的占有为8byte,而我本机64位,所以数组的连续性,可以看出来,第一个索引值的地址到第二个索引值的地址为8byte而对于string却可以看到是16byte,翻过string的实现,如下
type stringStruct struct {
str unsafe.Pointer
len int
}
由上面结构体,可以看到string结构体为一个指针与一个int类型的len字段属性合成的,而对于上面字符串数组第一个索引与第二个索引之间的间距为16个字节,便可以解释通,一个8字节的指针与一个int类型加起来正好是16字节