golang的slice你真的搞懂了吗
Posted 柳清风09
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang的slice你真的搞懂了吗相关的知识,希望对你有一定的参考价值。
golang slice
先看一个简单的代码块
package main
import (
"fmt"
)
func main()
//case 1
a := []int
a = append(a, 1)
a = append(a, 2)
b := append(a, 3)
c := append(a, 4)
fmt.Println("a: ", a, "\\nb: ", b, "\\nc: ", c)
//case 2
a = append(a, 3)
x := append(a, 4)
y := append(a, 5)
fmt.Println("a: ", a, "\\nx: ", x, "\\ny: ", y)
输出的结果如下
a: [1 2]
b: [1 2 3]
c: [1 2 4]
a: [1 2 3]
x: [1 2 3 5]
y: [1 2 3 5]
其他的都是输出都是常规操作,可能很多人对这个x的输出感到诧异,为什么是1 2 3 5,而不是 1 2 3 4.这是因为,他们都是切片,切片底层公用一个数组。x和y都是指针,指向同一个底层数组。
当在操作b和c时候,由于超过了数组的slice的cap容量,会触发扩容操作,所以b和c分别指向了两个不同的新数组。而当x和y追加操作时,并未触发新数组创建,x和y指向同一个底层数组,所以在
x追加操作时,返回的任然是a的指针,len是4和a的容量4。
y追加操作时,返回的任然是a的指针,len是4和a的容量4。
以上是关于golang的slice你真的搞懂了吗的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 小技巧之 Dart 里的 List 和 Iterable 你真的搞懂了吗?
Unicode,UTF-8和GBK编码方式,你真的搞懂了吗?