>백엔드 개발 >Golang >golang 슬라이싱 사용법에 대한 심층 소개

golang 슬라이싱 사용법에 대한 심층 소개

PHPz
PHPz원래의
2023-04-05 10:29:491361검색

【소개】

Go 언어는 C 계열 프로그래밍 언어로 효율성, 단순성, 안전성 등의 특징을 갖고 있으며, 현대 프로그래밍 언어의 특징도 가지고 있습니다. Go 언어에서 슬라이스는 매우 중요한 데이터 유형이며 많은 상황에서 널리 사용됩니다. 이 글에서는 모든 사람들이 golang에서 슬라이스의 사용법을 더 잘 이해할 수 있도록 golang에서 슬라이스의 사용법을 심층적으로 소개합니다.

【1. 슬라이싱의 기본 정의】

먼저 golang에서 슬라이싱의 기본 정의를 살펴보겠습니다. Go 언어에서 슬라이스는 배열 요소에 대한 포인터, 길이 및 용량이라는 세 가지 필드를 포함하는 구조입니다. 슬라이스를 생성할 때 내장된 make() 함수를 사용해야 하는데, 다음과 같은 형식을 가지고 있습니다.

func make([]T, len, cap) []T

그 중 T는 슬라이스의 요소 유형을 나타내고, len은 슬라이스의 길이를 나타내며, cap은 슬라이스의 요소 유형을 나타냅니다. 슬라이스의 용량. make() 함수 사용시 용량을 지정하지 않으면 용량은 길이와 동일하다.

구체적으로 다음 코드를 통해 슬라이스를 생성할 수 있습니다.

a := make([]int, 5) //创建一个长度为5的int类型切片
b := make([]int, 3, 5) //创建一个长度为3,容量为5的int类型切片

보시다시피 make() 함수는 작업을 위해 변수에 할당할 수 있는 새 슬라이스를 반환합니다.

【2. 슬라이싱의 기본 작업】

슬라이스를 정의한 후 슬라이스에 대한 몇 가지 기본 작업을 수행할 수 있습니다. 아래에서는 golang에서 슬라이싱의 일반적인 작업을 자세히 소개합니다.

【2.1 슬라이스 액세스 및 순회】

우선 인덱싱을 통해 슬라이스의 요소에 액세스할 수 있습니다. 배열과 마찬가지로 golang의 슬라이스 인덱스도 0부터 시작합니다. 예:

a := []int{1, 2, 3}
fmt.Println(a[0]) //输出1
fmt.Println(a[1]) //输出2
fmt.Println(a[2]) //输出3

동시에 for 루프를 사용하여 슬라이스의 모든 요소를 ​​탐색할 수도 있습니다. 예:

a := []int{1, 2, 3}
for i:=0;i<len(a);i++ {
    fmt.Println(a[i])
}

또한 golang은 슬라이스의 모든 요소를 ​​탐색하는 데 사용할 수 있는 range 키워드도 제공합니다. 예:

a := []int{1, 2, 3}
for i, v := range a {
    fmt.Println(i, v)
}

위 코드에서 i는 요소의 인덱스를 나타내고 v는 요소의 값을 나타냅니다.

【2.2 슬라이스 추가 작업】

golang에서는 add() 함수를 사용하여 슬라이스에 새 요소를 추가할 수 있습니다. 이 함수의 형식은 다음과 같습니다.

func append(s []T, vs ...T) []T

여기서 s는 추가할 슬라이스를 나타내고 vs는 추가할 요소를 나타냅니다. Append() 함수에서는 하나 이상의 매개변수를 전달하고 이를 슬라이스 끝에 추가할 수 있습니다. 예:

a := []int{1, 2, 3}
a = append(a, 4, 5, 6)
fmt.Println(a) //输出[1 2 3 4 5 6]

append() 함수를 사용하면 새 슬라이스가 생성된다는 점에 유의해야 합니다. 새 조각을 변수에 할당해야 하는 경우 변수를 다시 할당해야 합니다. 그렇지 않으면 원래 조각이 변경되지 않습니다.

【2.3 슬라이스 복사 작업】

golang에서는 copy() 함수를 사용하여 슬라이스를 복사할 수 있습니다. 함수의 형식은 다음과 같습니다.

func copy(dst, src []T) int

여기서 dst는 대상 슬라이스를 나타내고 src는 소스 슬라이스를 나타냅니다. copy() 함수를 호출할 때 대상 슬라이스의 길이가 소스 슬라이스보다 작으면 대상 슬라이스 길이의 요소만 복사됩니다. 예:

a := []int{1, 2, 3}
b := make([]int, 2)
copy(b, a)
fmt.Println(b) //输出[1 2]

copy() 함수를 사용하면 새 슬라이스도 생성된다는 점에 유의해야 합니다.

【3. 슬라이스 확장】

슬라이스에 요소를 추가할 때 슬라이스에 더 이상 공간이 충분하지 않으면 golang이 자동으로 슬라이스를 확장합니다. 확장 시 golang은 슬라이스 용량을 두 배로 늘리고 새로운 기본 배열을 생성합니다. 동시에 golang은 원본 슬라이스의 요소를 새로운 기본 배열에 복사합니다.

확장 중에 새 기본 배열의 길이가 너무 길면 golang은 현재 슬라이스의 요소 수에 따라 새 기본 배열의 길이를 선택합니다. 특히 golang은 다음 규칙에 따라 선택합니다.

  • 슬라이스의 요소 수가 1024개보다 작으면 새 기본 배열 길이는 원래 길이의 두 배와 같습니다. 슬라이스가 1024보다 크거나 같으면 새로운 기본 배열 길이는 원본의 1.25배와 같습니다.
  • golang에서 슬라이스의 확장 메커니즘을 이해한 후에는 슬라이스를 더 잘 활용하고 프로그램의 효율성을 향상시킬 수 있습니다.

【4. 슬라이스의 메모리 관리】

슬라이스를 사용할 때는 메모리 관리 문제에 주의해야 합니다. golang에서 기본 슬라이스는 배열에 해당합니다. 슬라이스가 다른 변수에 할당되면 기본 배열도 복사됩니다. 예:

a := []int{1, 2, 3}
b := a //将a赋值给b
b[0] = 4 //改变b中的第一个元素
fmt.Println(a) //输出[1 2 3]
fmt.Println(b) //输出[4 2 3]

슬라이스가 함수에 매개변수로 전달되는 경우 슬라이스의 기본 레이어가 배열에 해당하므로 함수에서 슬라이스 요소를 수정하면 원래 슬라이스에도 영향을 미친다는 점에 유의해야 합니다. . 예:

func changeSlice(a []int) {
    a[0] = 4 //修改a中的第一个元素
}

b := []int{1, 2, 3}
changeSlice(b)
fmt.Println(b) //输出[4 2 3]

슬라이싱 및 기본 배열의 메모리 관리 문제를 이해한 후에는 슬라이싱을 더 잘 사용하고, 프로그램 효율성을 향상시키며, 기본 배열에 대한 예기치 않은 영향을 피할 수 있습니다.

【결론】

Slice는 golang에서 매우 중요한 데이터 유형이며 여러 경우에 널리 사용됩니다. 이 글에서는 golang에서 슬라이스의 기본 정의, 연산, 확장, 메모리 관리에 대해 자세히 소개합니다. 이 글이 여러분이 golang에서 슬라이스의 사용법을 더 잘 이해하고 슬라이스를 더 잘 활용하여 효율적인 프로그램을 개발하는 데 도움이 되기를 바랍니다.

위 내용은 golang 슬라이싱 사용법에 대한 심층 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.