범위 값 대신 요소 수정을 위해 배열 인덱스 사용
Go 프로그래밍에서 range 키워드는 컬렉션을 반복하고 두 키를 모두 반환합니다. 그리고 각 요소 값의 사본입니다. 이 동작은 루프 내에서 값 수정을 방해할 수 있습니다. 다음 예에서는 이 문제를 보여줍니다.
package main import "fmt" type MyType struct { field string } func main() { var array [10]MyType // Attempt to modify field using range values: for _, e := range array { e.field = "foo" } // Verify that field hasn't been modified: for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
이 코드에서는 범위 루프를 사용하여 배열에 있는 각 요소의 필드를 수정하려고 합니다. 그러나 범위는 값의 복사본을 반환하므로 배열의 실제 요소는 변경되지 않습니다. 이로 인해 모든 필드 값이 비어 있게 됩니다.
해결책: 배열 인덱스 사용
이 문제를 해결하고 실제 요소를 수정하려면 대신 배열 인덱스를 사용해야 합니다. 범위 루프에서 반환된 값입니다. 수정된 코드는 다음과 같습니다.
import "fmt" type MyType struct { field string } func main() { var array [10]MyType // Modify field using array indices: for idx, _ := range array { array[idx].field = "foo" } // Verify that field has been modified: for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
값 대신 각 요소의 인덱스를 사용하면 배열의 실제 요소에 직접 액세스하고 수정할 수 있습니다. 이렇게 하면 필드 값이 올바르게 업데이트됩니다.
위 내용은 Go의 Range 키워드를 사용하면 배열 요소를 수정하는 데 실패하는 이유는 무엇이며 배열 인덱스는 어떻게 솔루션을 제공할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!