>  기사  >  백엔드 개발  >  Go 언어의 슬라이스에 대해 이야기해 보겠습니다.

Go 언어의 슬라이스에 대해 이야기해 보겠습니다.

青灯夜游
青灯夜游앞으로
2022-07-04 20:51:142316검색

이 글은 golang의 가변 길이 "배열"을 안내해 드립니다. - 슬라이스가 여러분에게 도움이 되기를 바랍니다.

Go 언어의 슬라이스에 대해 이야기해 보겠습니다.

골랑 슬라이스(slice)

(1) 슬라이스의 정의

슬라이스(Slice)는 동일한 유형의 요소로 구성된 가변 길이 시퀀스입니다. 배열 유형을 기반으로 한 캡슐화 계층입니다. 매우 유연하며 자동 확장을 지원합니다.

슬라이스(Slice)는 참조 유형이며 내부 구조에는 주소, 길이 및 용량이 포함됩니다. 슬라이스는 일반적으로 데이터 모음에 대해 신속하게 작업하는 데 사용됩니다. [관련 추천: Go 동영상 튜토리얼]

슬라이스 생성과 배열 생성의 유일한 차이점은 Type 앞의 "[]"에 숫자가 있는지 여부입니다. 비어 있으면 슬라이스를 나타냅니다. 배열을 나타냅니다. 슬라이스는 길이가 가변적이기 때문에

var a []string  //声明一个字符串切片
var b = []int{1,2,3} //声明一个整数类型切片并初始化
var c = []bool{false,true} //声明一个bool类型并且初始化

실제로 실제 상황에서는 다음과 같이 이해하는 경우가 많습니다. 슬라이스는 배열의 일부입니다

num:=[3]int{0,1,2}
//:前后表示数组内部的索引
sc1:=num[:] //获取数组的全部
sc2:=num[0:2] //左闭右开,取到的是[0,1]
sc3:=num[1:] //取到的是[2]
sc4:=num[:1]  //取到的是[0]

(2) make 함수를 사용하여 슬라이스를 생성합니다

이것은 다음에 해당하기 시작합니다. 즉, make 함수를 사용하여 슬라이스의 용량을 가변화할 수 있습니다. 슬라이스의 본질은 기본 배열의 포인터, 길이라는 세 가지 정보를 포함합니다. 슬라이스의 용량(len)과 슬라이스의 용량(cap)입니다.

// make([]T, size, cap)
sc=make([]int,2,10)
fmt.Println(sc) // [0 0]
fmt.Println(len(sc)) // len表示切片存储元素的长度
fmt.Println(cap(sc)) // cap表示最大可以存储的容量

(3) 슬라이스 순회

sc:=[]int{1,2,3}
//普通for循环遍历
for i:=0;i<len(sc);i++{
	fmt.Println(s[i])
}
//for range遍历
for index,value:=range s{
	fmt.Println(index,value)
}

(4)append() 메소드

Go 언어의 내장 함수인append()는 동적으로 슬라이스에 요소를 추가할 수 있습니다. 한 번에 하나의 요소를 추가하거나, 여러 요소를 추가하거나, 다른 슬라이스의 요소(뒤에...)를 추가할 수 있습니다.

var s1 []int  //定义切片s1
s1 = append(s1,1)  //在切片s1后面添加一个1的元素
s1 = append(s1,2,3,4) //在切片s1后面继续添加2,3,4
s2:=[]int{5,6,7}  //定义切片s2
s1 = append(s1,s2) //把切片s2中的元素追加到切片s1中

(5) 복사 방법

Go 언어에 내장된 copy() 함수는 한 슬라이스의 데이터를 다른 슬라이스 공간으로 빠르게 복사할 수 있습니다.

a:=[]int{1,2,3,4,5}
b:=make([]int,5,5)
copy(b,a) //把a切片中的元素copy到b切片中的元素
fmt.Println(b) //[1,2,3,4,5]
b[0]=1000
fmt.Println(b) // [1000,2,3,4,5]
여기서 주의할 점은 실제 개발에서는 이런 문제가 있다는 것입니다

a := []int{1, 2, 3, 4, 5}
b := a
fmt.Println(a) //[1 2 3 4 5]
fmt.Println(b) //[1 2 3 4 5]
b[0] = 1000
fmt.Println(a) //[1000 2 3 4 5]
fmt.Println(b) //[1000 2 3 4 5]
/*
由于切片是引用类型,所以a和b其实都指向了同一块内存地址。
修改b的同时a的值也会发生变化。
*/

(6) 슬라이스의 요소를 교묘하게 삭제하세요

Go 언어에서는 슬라이스 요소를 삭제하는 특별한 방법이 없습니다. 슬라이스 자체 속성은 요소를 삭제합니다. 코드는 다음과 같습니다.

// 从切片中删除元素
a := []int{30, 31, 32, 33, 34, 35, 36, 37}
// 要删除索引为2的元素
a = append(a[:2], a[3:]...)
fmt.Println(a) //[30 31 33 34 35 36 37]
/*
总结一下就是:要从切片a中删除索引为index的元素,
操作方法是a = append(a[:index], a[index+1:]...)
*/
더 많은 프로그래밍 관련 지식을 보려면

프로그래밍 비디오를 방문하세요! !

위 내용은 Go 언어의 슬라이스에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제