Go 언어에서는 add()를 사용하여 슬라이스에 요소를 동적으로 추가할 수 있습니다. append()는 "append(slice, element 1, element 2...)" 또는 "append(slice, new Slice...)" 구문을 사용하여 하나의 요소, 여러 요소 또는 새 슬라이스를 슬라이스에 추가할 수 있습니다. . add() 함수를 사용하여 슬라이스에 요소를 동적으로 추가할 때 충분한 요소를 수용할 공간이 충분하지 않으면 슬라이스가 "확장"되고 새 슬라이스의 길이가 변경됩니다.
이 튜토리얼의 운영 환경: 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) }
코드 출력은 다음과 같습니다. 다음:
코드 설명 다음과 같습니다.
라인 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!