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编码方式,你真的搞懂了吗?

Salesforce管理员必须知道的21个功能,你都搞懂了吗?(下)

商业Shader渲染——渲染本身

HTTP你真的懂了吗?