初级会员
  • 第 52697 位会员
  • zbchuan
  • 2020-05-09 11:46:47
  • Offline
  • 22 26

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 今天在go语言中文网公众号上看到以下 ![image.png](https://static.studygolang.com/201105/133c3263ea01b03c87fed2d39d413f31.png) 所以,这里的文章已经放弃维护,存在bug,并不适合拿来学习是吗?
  • "当新的元素被添加到切片时,会创建一个新的数组。现有数组的元素被复制到这个新数组中,并返回这个新数组的新切片引用。现在新切片的容量是旧切片的两倍。" 关于切片容量变化的,简单测了下,文中所说的翻倍不准确,10楼说的2的倍数也不是。具体可能还是要看底层源码才能搞明白。 a. numNewElement < cap(slice) - len(slice) ,并不会创建新的数组 //追加新元素时,是否创建新的数组要看 追加后的长度是否超过原来切片的容量 testa := [...]string {"a","b","c","d"} tests := testa[1:3] tests = append(tests, "f") //追加未超过原切片的容量,并不会创建新的数组,修改切片仍能对应更改到源数组 tests[0] = "x" fmt.Println("testa:",testa, "tests:", tests) //testa: [a x c f] tests: [x c f] b. cap(slice) - len(slice) < numNewElement < cap(slice) , 和文中所说一致,容量翻倍 c. numNewElement > cap(slice) ,增加的容量跟切片数据类型相关 //追加的元素数据大于原切片的容量时,新切片的容量不是简单的翻倍,也不是10楼所说的2的倍数 //string类型时,容量变化大小是 追加元素的数量 tests := []string{"a","b"} tests = append(tests,"e","f","g") fmt.Println(cap(tests)) //5 //int类型时,容量变化大小是 追加元素的数量的“向上取偶” testi := []int{1,2} testi = append(testi,5,6,7) fmt.Println(cap(testi)) //6 如果要“准确”的认识,还是得看底层实现逻辑
  • statement可选语句的第二个例子,似乎说明不了什么。