>백엔드 개발 >Golang >Go 언어로 슬라이스에 요소를 추가하는 방법

Go 언어로 슬라이스에 요소를 추가하는 방법

青灯夜游
青灯夜游원래의
2023-01-10 14:06:123243검색

Go 언어에서는 add()를 사용하여 슬라이스에 요소를 동적으로 추가할 수 있습니다. append()는 "append(slice, element 1, element 2...)" 또는 "append(slice, new Slice...)" 구문을 사용하여 하나의 요소, 여러 요소 또는 새 슬라이스를 슬라이스에 추가할 수 있습니다. . add() 함수를 사용하여 슬라이스에 요소를 동적으로 추가할 때 충분한 요소를 수용할 공간이 충분하지 않으면 슬라이스가 "확장"되고 새 슬라이스의 길이가 변경됩니다.

Go 언어로 슬라이스에 요소를 추가하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

Go 언어에서는 add()를 사용하여 슬라이스에 요소를 동적으로 추가할 수 있습니다.

Go 언어의 add() 함수

append는 하나의 요소, 여러 개의 요소 및 새 슬라이스를 슬라이스에 추가할 수 있습니다

var a []int
a = append(a, 1) // 追加1个元素
a = append(a, 1, 2, 3) // 追加多个元素, 手写解包方式
a = append(a, []int{1,2,3}...) // 追加一个切片, 切片需要解包

그러나 Append() 함수를 사용하여 슬라이스 동적 요소를 추가할 때 충분한 요소를 수용할 공간이 충분하지 않으면 슬라이스가 "확장"되고 새 슬라이스의 길이가 변경됩니다.

슬라이스 확장 시 용량 확장 규칙은 1, 2, 4, 8, 16...과 같이 용량의 2배로 확장하는 것입니다. 코드는 다음과 같습니다.

var numbers []int


for i := 0; i < 10; i++ {
    numbers = append(numbers, i)
    fmt.Printf("len: %d  cap: %d pointer: %p\n", len(numbers), cap(numbers), numbers)
}

코드 출력은 다음과 같습니다. 다음:

Go 언어로 슬라이스에 요소를 추가하는 방법

코드 설명 다음과 같습니다.

  • 라인 1은 정수 슬라이스를 선언합니다.

  • 라인 4, 숫자 슬라이스에 10개의 숫자를 추가하는 루프입니다.

  • 라인 5, 슬라이스의 길이, 용량 및 포인터 변경 사항을 인쇄하고, len() 함수를 사용하여 슬라이스에 있는 요소 수를 확인하고, 함수 cap()을 사용하여 슬라이스의 용량을 확인합니다. .

코드 출력을 살펴보면 흥미로운 규칙을 찾을 수 있습니다. 슬라이스 길이 len은 슬라이스 용량 한도와 동일하지 않습니다.

슬라이스에 요소를 지속적으로 추가하는 과정은 회사가 이사하는 것과 비슷합니다. 회사 발전 초기에는 자금이 부족하고 직원이 적기 때문에 모든 직원을 수용할 수 있는 작은 공간만 있으면 됩니다. 사업이 확장되고 수입도 늘어나며, 워크스테이션 수를 늘리려면 워크스테이션을 확장해야 하지만 사무실 공간의 크기는 고정되어 있어 변경할 수 없으므로 회사는 이동할 때마다 모든 인력을 이동해야 합니다. 새로운 사무실 위치로.

  • 직원과 작업장은 슬라이스의 요소입니다.

  • 사무실은 할당된 메모리입니다.

  • 이동은 메모리 재할당을 의미합니다.

  • 몇 번을 옮겨도 회사 이름은 절대 바뀌지 않으며, 외부 슬라이스를 나타내는 변수 이름도 바뀌지 않습니다.

  • 이사 후 주소가 변경되므로 메모리 "주소"도 수정됩니다.

슬라이스 끝에 추가하는 것 외에도 슬라이스 시작 부분에 요소를 추가할 수도 있습니다.

var a = []int{1,2,3}
a = append([]int{0}, a...) // 在开头添加1个元素
a = append([]int{-3,-2,-1}, a...) // 在开头添加1个切片

슬라이스 시작 부분에 요소를 추가하면 일반적으로 메모리 재할당이 발생하고 기존 요소가 모두 추가됩니다. 한 번 복사되므로 슬라이스 시작 부분에서 요소를 추가하는 성능은 꼬리 부분에서 요소를 추가하는 것보다 훨씬 나쁩니다.

append 함수는 새 슬라이스의 특성을 반환하므로 슬라이스는 체인 작업도 지원하여 여러 추가 작업을 결합하여 슬라이스 중간에 요소를 삽입할 수 있습니다.

var a []int
a = append(a[:i], append([]int{x}, a[i:]...)...) // 在第i个位置插入x
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...) // 在第i个位置插入切片

각 추가 작업의 두 번째 추가 호출 임시 슬라이스 a[i:]의 내용이 새로 생성된 슬라이스에 복사된 다음 임시로 생성된 슬라이스가 a[:i]에 추가됩니다.

【관련 추천: Go 비디오 튜토리얼, 프로그래밍 교육

위 내용은 Go 언어로 슬라이스에 요소를 추가하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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