>  기사  >  백엔드 개발  >  Golang에서 `array`와 `slice{array,array,...}`의 차이점은 무엇입니까?

Golang에서 `array`와 `slice{array,array,...}`의 차이점은 무엇입니까?

WBOY
WBOY앞으로
2024-02-08 23:10:101115검색

Golang 中 `array` 和 `slice{array,array,...}` 有什么区别?

Golang에서 `array`와 `slice{array,array,...}`의 차이점은 무엇인가요? 많은 초보자들이 자주 묻는 질문입니다. PHP 편집자 Zimo가 답변해 드립니다. Golang에서 '배열'은 고정 길이 시퀀스입니다. 일단 정의하면 길이를 변경할 수 없습니다. '슬라이스'는 필요에 따라 확장하거나 축소할 수 있는 동적 길이의 시퀀스입니다. 또한 'array'의 길이는 정의 시점에 결정되는 반면, 'slice'의 길이는 런타임에 동적으로 변경될 수 있습니다. 따라서 이를 사용할 때에는 실제 필요에 따라 적절한 데이터 구조를 선택해야 합니다.

질문 내용

이유를 알고 싶습니다. 힌트를 주세요.

2D 슬라이스인 res中,res에 배열을 추가하고 싶습니다. 그래서 먼저 변환을 해야 합니다. 배열을 슬라이스로 변환하면 오류가 발생합니다.

으아악 으아악

하지만 결과는 내가 원하는 것이 아니다.

그런 다음 임시로 for 루프를 수정했습니다

으아악 으아악

이제 결과는 맞았는데 왜일까요? k[:][]int{k[0],k[1],k[2]} 차이점은 무엇인가요?

해결 방법

루프를

로 변경하세요. 으아악

원본 루프는 다른 키가 복사되는 [3]int 的变量 k,该变量在内存中具有特定位置。循环的每次迭代,都会将映射 mm 유형의 변수를 선언합니다. 여태까지는 그런대로 잘됐다.

사용 시 k[:] 将其转换为切片时,它会创建一个切片标头,指向数组 k。这里出错了 - 循环的下一次迭代,k 的值被覆盖。循环中创建的所有切片都指向内存中同一位置的同一支持数组 k.

먼저 k의 값을 루프 내부에 선언된 변수에 복사하여 각 슬라이스에 자체 백업 배열을 제공함으로써 문제를 방지할 수 있습니다.

위 내용은 Golang에서 `array`와 `slice{array,array,...}`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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