1、先做一个简单的字符串数组应用的测试
months := [...]string{1: "January", 2: "Fed", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "Septemper", 10: "October", 11: "November", 12: "December"}
fmt.Printf("len=%d %s\n", len(months), months[8])
summer := months[6:9]
fmt.Printf("summer:%s\n", summer)
定义了一个针对月份对应英文的字符串的数组,输入出长度为13, 因为空了第0个位置, 数组还可以获取某几个的组合, 比如夏天summer可以取到6到9月,输出结果如下:
len=13 August
summer:[June July August]
2、 定义一个包含unicode字符的字符串
var testStr = "test string 测试串"
fmt.Printf("\nT1:len=%d %q\n", len(testStr), testStr)
此时获取到的字符串长度,默认go是用utf8来对unicode编码,utf8占3个节,因此输出结果如下:
T1:len=21 "test string 测试串"
如果想得到真实的字符个数的话,可以使用如下的方式来取得:
var testStr = "test string 测试串"
fmt.Printf("\nT2:len=%d %q\n", utf8.RuneCountInString(testStr), testStr)
这时就可以得到真实的字符个数,输出结果如下:
T2:len=15 "test string 测试串"
3、 定义一个包含unicode字符的slice(可变数组)
var runes []rune //type rune = int32
//将一个unicode字符串的字符逐个添加到runes
for idx, r := range "test string 测试串" {
runes = append(runes, r)
fmt.Printf("%2d:cat=%2d addr=%p\t %v\n", idx, cap(runes), runes, runes)
}
fmt.Printf("\nlen=%d %q", len(runes), runes)
上述的测试的代码输出了每一次添加到slice中新的字符后, slice的容量和地址的变化规律,可以发现,它其实与不可变数组相似,每当发现容量不够用的时候,以当前的长度乘以2作为新的容量,创建了一个新数组(地址会变化),并将旧的数据copy到新的地址中,以此来达到可变数组的目的,上述代码输出结果如下:
0:cat= 2 addr=0xc000092420 [116]
1:cat= 2 addr=0xc000092420 [116 101]
2:cat= 4 addr=0xc000092450 [116 101 115]
3:cat= 4 addr=0xc000092450 [116 101 115 116]
4:cat= 8 addr=0xc0000ac1c0 [116 101 115 116 32]
5:cat= 8 addr=0xc0000ac1c0 [116 101 115 116 32 115]
6:cat= 8 addr=0xc0000ac1c0 [116 101 115 116 32 115 116]
7:cat= 8 addr=0xc0000ac1c0 [116 101 115 116 32 115 116 114]
8:cat=16 addr=0xc0000b2080 [116 101 115 116 32 115 116 114 105]
9:cat=16 addr=0xc0000b2080 [116 101 115 116 32 115 116 114 105 110]
10:cat=16 addr=0xc0000b2080 [116 101 115 116 32 115 116 114 105 110 103]
11:cat=16 addr=0xc0000b2080 [116 101 115 116 32 115 116 114 105 110 103 32]
12:cat=16 addr=0xc0000b2080 [116 101 115 116 32 115 116 114 105 110 103 32 27979]
15:cat=16 addr=0xc0000b2080 [116 101 115 116 32 115 116 114 105 110 103 32 27979 35797]
18:cat=16 addr=0xc0000b2080 [116 101 115 116 32 115 116 114 105 110 103 32 27979 35797 20018]
len=15 ['t' 'e' 's' 't' ' ' 's' 't' 'r' 'i' 'n' 'g' ' ' '测' '试' '串']