Go 변수를 덮어쓰는 중
이 코드에서 작성자는 pathB를 설정할 때 pathA 변수를 덮어쓰는 문제에 직면합니다. 이는 두 변수가 모두 동일한 기본 배열을 참조하여 하나의 수정이 다른 하나에 영향을 미친다는 것을 의미합니다.
이 문제는 Go에서 슬라이스와 함께 추가() 함수를 사용하는 데서 발생합니다. 요소를 슬라이스에 추가할 때 Go는 기본 배열에 새 요소를 수용할 만큼 충분한 용량이 있는지 확인합니다. 그렇지 않은 경우 더 큰 배열을 할당하고 기존 요소를 복사합니다.
제공된 코드에서 슬라이스 경로는 pathA와 pathB를 모두 생성하는 데 사용됩니다. pathA 또는 pathB에 추가할 때 기본 경로 배열의 용량이 초과되면 새 배열이 할당됩니다. 그러나 pathA와 pathB는 모두 동일한 슬라이스에서 파생되므로 동일한 기본 배열을 공유합니다.
이 문제를 방지하려면 경로를 사용하여 pathA와 pathB를 초기화하기 전에 경로의 독립적인 복사본을 생성해야 합니다. 이는 작성자의 두 번째 편집에서 볼 수 있듯이 make() 및 copy() 함수를 사용하여 수행할 수 있습니다.
<code class="go">newRoute := make([]int, len(prePaths[i]), (cap(prePaths[i])+1)*2) copy(newRoute, prePaths[i]) pathA := append(newRoute, nextA) pathB := append(prePaths[i], nextB)</code>
이 수정된 코드에서 newRoute는 자체 기본 배열이 있는 별도의 슬라이스입니다. 이렇게 하면 pathA와 pathB가 독립적인 데이터 복사본을 가지게 되어 하나의 수정이 다른 하나에 영향을 미치는 것을 방지할 수 있습니다.
위 내용은 하나의 Go 변수를 설정하면 다른 변수를 덮어쓰는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!