go语言集合类型补充

129 阅读2分钟

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」。

0 环境

  • 系统环境:win10
  • 编辑器:vscode
  • go版本:gol.17.3

1 字符串和字节切片

字符串是不可变的字节序列,可直接转为字节切片。

字符串既可以转为字节,也可以通过数组的形式读取。s[12]其实没有越界,因为一个汉字转化就是3个字节,所以长度是15,假如你想要字符串长度,utf8.RuneCountInString(字符串),循环中,i代表索引,r代表unicode字符所对应的 unicode码点,说明使用for range循环它在处理字符串的时,会隐式解码unicode字符串(自动处理的)。

func stringDemo() {
   s := "123456小王呀"
   bytes := []byte(s)
   // 6 + 3 * 3 = 15
   fmt.Println("bytes ==>",bytes, "\nlen ==>", len(s))
   fmt.Println(s[0],s[1],s[2],s[12])

   for i, r := range s {
      fmt.Println(i,r)
   }

   // 字符长度
   fmt.Println("utf8 len",utf8.RuneCountInString(s))
}

image.png

2 切片补充

删除一个元素,比如删除一个数字4 image.png

从头开始出栈 image.png

从尾开始出栈

长度虽然是8,但是最大索引值的是7,因为从0开始算的,s[:sLen]其实就是获取s[0]到s[6]的值。 image.png

4 小技巧

map的返回值,也是第一个返回值可以用_忽略的,只要第二个返回值,并且if判断,只要加一个分号即可,区分返回值和布尔值。

image.png

4 总结

字符串可以转为字节,输出的结果以数组的形式展示一个个字节,而且字符串可以直接用索引的方式获取字符串里的某个字符。注意:中文与英文字符是有区别的(比例:1:3)。补充:当slice添加元素后,超过了容量的大小,系统会自动重新分配更大的底层数组。原来的数组没人用了,就会被垃圾回收掉。map返回值也是可以用_忽略的,第二个返回值是布尔值不需要加_,因为你可以直接不写这个变量,即么有它的值。