golang中的数组切片

author author     2022-08-14     131

关键词:

概念:基于数组,数组切片添加了一系列管理功能,可以随时动态扩充存放空间,并且不会导致所管理的元素被重复复制。


创建数组切片:

方法一,基于数组:

package main

import "fmt"

func main() {
	//define an array
	var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

	//create a slice based on array
	var mySlice []int = myArray[:5]

	fmt.Println("Elements of myArray: ")
	for _, v := range myArray {
		fmt.Print(v, " ")
	}

	fmt.Println("
Elements of mySlice: ")
	for _, v := range mySlice {
		fmt.Print(v, " ")
	}

	fmt.Println()
}

运行结果:

Elements of myArray: 

1 2 3 4 5 6 7 8 9 10 

Elements of mySlice: 

1 2 3 4 5

方法二,直接创建:

Golang提供的内置函数make()可以用于灵活地创建数组切片。

创建一个初始元素个数为5的数组切片,元素初始值为0:

mySlice := make([]int, 5)

创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间:

mySlice := make([]int, 5, 10)

直接创建并初始化包含5个元素的数组切片:

mySlice := []int{1, 2, 3, 4, 5}


遍历:

传统遍历:

for i:=0; i<len(mySlice); i++ {

    fmt.Println("mySlice[", i, "] =", mySlice[i])

}

range遍历:

for i, v := range mySlice {

    fmt.Println("mySlice[", i, "] =", v)

}


存储能力(capacity):

概念:元素个数和分配的空间可以是两个不同的值。

cap():返回数组切片分配的空间大小

len():返回数组切片中当前所存储的元素个数

package main

import "fmt"

func main() {
	mySlice := make([]int, 5, 10)

	fmt.Println("len(mySlice):", len(mySlice))
	fmt.Println("cap(mySlice):", cap(mySlice))
}

输出结果:

len(mySlice): 5

cap(mySlice): 10


append():

继续新增元素,下面代码可从尾端给mySlice加上三个元素,从而生成一个新的数组切片。

mySlice = append(mySlice, 1, 2, 3)

下面代码直接将一个数组切片追加到另一个数组切片的末尾。

mySlice2 := []int{8, 9, 10}

mySlice = append(mySlice, mySlice2...)


基于数组切片创建数组切片:

oldSlice := []int{1, 2, 3, 4, 5}

newSlice := oldSlice[:3]


copy():

slice1 := []int{1, 2, 3, 4, 5}

slice2 := []int{5, 4, 3}

copy(slice2, slice1)    //只会复制slice1的前3个元素到slice2中

copy(slice1, slice2)    //复制slice2的3个元素到slice1的前三个位置


golang数组与切片(代码片段)

golang中坑的慢慢踩!我们都知道golang中的切片是引用类型,但是在函数中使用append给切片追加元素是行不通的,需要使用切片的指针类型才能增加元素数组的使用:packagemainimport("fmt")funcChangeArr(arr[5]int)arr[0]=6funcChangeArr2(arr*[5]int)ar... 查看详情

golang数组和切片(代码片段)

数组的使用注意事项和细节1.数组是多个相同类型数据的结合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。2.vararr[]int这时arr就是一个slice切片,切片后面专门讲解。3.数组中的元素可以是任何数... 查看详情

Golang:传入切片作为参考问题

】Golang:传入切片作为参考问题【英文标题】:Golang:PassinginSliceasReferenceissue【发布时间】:2014-10-0919:16:04【问题描述】:我正在尝试编写一个计算数组中反转的程序,但由于引用问题,我的数组没有正确排序,因此即使我认为... 查看详情

Golang 不能用作类型结构数组或切片文字

】Golang不能用作类型结构数组或切片文字【英文标题】:Golangcannotuseastypestructarrayorsliceliteral【发布时间】:2017-05-1203:51:52【问题描述】:我正在尝试在Go中编写一个函数,该函数采用带有目录URL的JSON并执行BFS以在该目录中查找... 查看详情

Golang从二维数组中切片列?

】Golang从二维数组中切片列?【英文标题】:Golangslicecolumnsfrom2darray?【发布时间】:2013-03-1503:09:58【问题描述】:我很好奇,如何从二维数组创建列切片?我有一个用于井字游戏棋盘的数组,我正在尝试创建一个列切片,但我的... 查看详情

golang之切片

1.切片:切片是数组的一个引用,因此切片是引用类型2.切片的长度可以改变,因此,切片是个可变的数组。3.切片遍历方式和数组一样,可以用len()求长度4.cap可以求出slice最大的容量,0<=cap(slice) <=len(array),其中array... 查看详情

golang循环切片通过golang中的切片使用范围(代码片段)

查看详情

如何在golang中将切片附加到字节数组

】如何在golang中将切片附加到字节数组【英文标题】:Howtoappendslicetobytearrayingolang【发布时间】:2018-02-0507:54:56【问题描述】:我尝试将动态切片传递给这个jsonstr切片varcatlist[]stringvarjsonStr=[]byte(`"categoryList":`+catlist+``)但是我收到... 查看详情

golang基础——切片和数组的区别(代码片段)

切片和数组的区别:● 切片是指针类型,数组是值类型● 数组的长度是固定的,而切片不是(切片是动态的数组)● 切片比数组多一个属性:容量(cap)● 切片的底层是数组切片是指针类型࿰... 查看详情

golang基础——切片和数组的区别(代码片段)

切片和数组的区别:● 切片是指针类型,数组是值类型● 数组的长度是固定的,而切片不是(切片是动态的数组)● 切片比数组多一个属性:容量(cap)● 切片的底层是数组切片是指针类型࿰... 查看详情

golang数据类型切片(slice)

前言Go中的数组数据类型的长度在声明的时候就已经固定了,切片是基于数组实现的可变长度的容器。  切片的定义和初始化切片类型和数组类型一样,想要使用,就必须要定义和初始化,不同之处已经提到,切片不需要... 查看详情

golang中数组与切片的区别(代码片段)

初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变数组:a:=[...]int1,2,3a:=[3]int1,2,3切片:a:=[]int1,2,3a:=make([]int,5)a:=make([]int,5,10)函数传递:数组需要明确指定大小,切片不需要。数组是值传递,切片是... 查看详情

《go题库·1》golang里的数组和切片有了解过吗?

题目来源:深信服、知乎、跟谁学题目解析:GOALNGROADMAP社区答案1:(溪尾)数组长度是固定的,而切片是可变长的。可以把切片看作是对底层数组的封装,每个切片的底层数据结构中,一定会包含一个数组。数组可以被称为切... 查看详情

golang入门:切片(slice)(代码片段)

切片(slice)是Golang中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数append()来实现的,这个函数可以快速且高效... 查看详情

golang使用golang从int的数组/切片中找到最小的数字(代码片段)

查看详情

golang中切片的cap vs len

】golang中切片的capvslen【英文标题】:capvslenofsliceingolang【发布时间】:2017-05-3019:11:18【问题描述】:golang中切片的cap和len有什么区别?根据定义:切片既有长度又有容量。切片的长度是它包含的元素数。切片的容量是底层数组... 查看详情

golang之数组,切片

1.数组:同一种数据类型的固定长度的序列。2.数组定义:vara[len]int,例如:vara[5]int3.长度是数组类型的一部分,因此,vara[5]int和vara[10]int是不同的类型4.数组可以通过下标进行访问,下标是从0开始,最后一个元素是len-1for i:=... 查看详情

golang中数组(array)和切片(slice)的区别

参考技术AGo中数组的长度是不可改变的,而Slice解决的就是对不定长数组的需求。他们的区别主要有两点。数组:切片:注意1虽然数组在初始化时也可以不指定长度,但Go语言会根据数组中元素个数自动设置数组长度,并且不可... 查看详情