>백엔드 개발 >Golang >이동: 두 번째 항목을 추가하면 첫 번째 항목이 변경됩니다.

이동: 두 번째 항목을 추가하면 첫 번째 항목이 변경됩니다.

PHPz
PHPz앞으로
2024-02-06 11:30:03632검색

이동: 두 번째 항목을 추가하면 첫 번째 항목이 변경됩니다.

질문 내용

무슨 말을 해야 할지 모르겠으니 코드와 출력만 보세요. 코드:

으아아아

출력:

으아아아

출력에서 people 0과 people 1 문자열을 살펴보세요. 나는 append를 사용하여 buf 0과 buf 1을 병합하므로 출력의 people 1 문자열은 다음과 같아야 합니다. [[{Alice A1} {Bob A2}]] [{Clark B1} {Davis B2}], 즉 배열의 첫 번째 요소가 삽입된 요소로 변경되지만, 그렇지는 않습니다. 원인은 무엇이며 해결 방법은 무엇입니까?

코드에서 문제를 발견하지 못했기 때문에 수정을 시도하지 않았습니다.


정답


수정은 buf 变量移动到 for 循环内,但我也相信这种混乱源于 buf 슬라이스를 만드는 것이라는 다른 사람들의 의견에 동의하지만 OP는 슬라이스가 어떻게 작동하는지 모를 수도 있습니다. 슬라이스는 Go 슬라이스: 사용법 및 내부 에 설명된 대로 배열과 다릅니다.

슬라이스

출처를 인용할 주요 문장:

이 점을 염두에 두고 다음의 간단한 예를 살펴보세요.

으아아아

출력: [[2] [2] [2]]

이것은 OP가 예시에서 관찰한 동작입니다. 슬라이스는 배열에 대한 포인터이므로 각 반복이 다른 인스턴스를 추가하도록 for 루프 내에서 buf를 선언해야 합니다.

이제 배열에서 동일한 작업을 수행하면 어떤 일이 발생하는지 살펴보겠습니다.

배열

출처를 인용할 주요 문장:

이제 배열을 전달할 때(예: append 에 전달할 때) 배열의 내용으로 구성된 복사본을 보여주는 예를 살펴보겠습니다.

으아아아

출력: [[0] [1] [2]]

이제 for 루프에 동일한 buf 변수가 사용되더라도 모든 값이 다릅니다.

위 내용은 이동: 두 번째 항목을 추가하면 첫 번째 항목이 변경됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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