golang으로 프로그래밍할 때 배열, 슬라이스, 맵, 채널과 같은 데이터 구조를 순회하는 데 사용되는 range 키워드를 자주 사용합니다. 그러나 순회 프로세스 중에 순회된 요소를 수정하려는 경우 몇 가지 문제에 직면하게 됩니다. 이 문서에서는 범위를 사용하여 배열, 슬라이스, 맵 및 채널의 요소를 수정하는 방법을 설명합니다.
배열 및 슬라이스를 순회할 때 range 키워드는 요소 자체가 아닌 요소의 복사본을 반환합니다. 따라서 요소를 수정하려면 해당 요소의 포인터를 사용해야 합니다. 다음은 배열 및 슬라이스 요소를 수정하는 코드 예제입니다.
arr := [3]int{1, 2, 3} for i := range arr { temp := &arr[i] *temp = *temp*2 } slice := []int{1, 2, 3} for i := range slice { temp := &slice[i] *temp = *temp*2 }
임시 변수 temp는 코드에서 요소의 포인터를 저장하고 포인터를 통해 요소의 값을 수정하는 데 사용됩니다.
지도를 탐색할 때 range 키워드는 요소 자체가 아닌 키-값 쌍의 복사본을 반환합니다. 따라서 요소를 수정하려면 키를 사용하여 요소에 액세스하고 해당 값을 수정해야 합니다. 다음은 지도 요소를 수정하는 코드 예제입니다.
oldMap := map[string]int{"a": 1, "b": 2, "c": 3} newMap := make(map[string]int) for k, v := range oldMap { newMap[k] = v*2 }
코드에서 지도를 탐색할 때 키는 요소에 액세스하고 해당 값을 수정하는 데 사용됩니다. 맵의 요소 값을 수정할 때는 포인터를 사용할 필요가 없습니다.
채널을 탐색할 때 range 키워드는 요소 자체가 아닌 요소의 복사본을 반환합니다. 따라서 채널의 요소를 수정하려면 채널의 전송 작업을 사용하여 채널의 값을 수정해야 합니다. 다음은 채널의 요소를 수정하기 위한 코드 예제입니다.
ch := make(chan int, 3) ch <- 1 ch <- 2 ch <- 3 for i := range ch { ch <- i*2 }
코드에서 채널의 전송 작업은 요소의 값을 원래 값의 두 배로 수정하는 데 사용됩니다. 채널의 요소를 수정할 때 채널의 전송 작업을 사용하여 수정된 값을 채널로 보내야 한다는 점에 유의해야 합니다.
요약:
range 키워드를 사용하여 배열, 슬라이스, 맵 및 채널을 순회할 때 순회된 요소를 수정하려면 요소(배열 및 슬라이스)의 포인터를 사용하고 키를 사용하여 액세스해야 합니다. 또는 요소(채널)의 값을 수정하려면 채널의 전송 작업을 사용하세요. Range를 사용하여 요소를 수정할 때 무한 루프나 루프 내 경쟁 조건과 같은 문제가 발생하지 않도록 주의해야 합니다.
위 내용은 범위를 사용하여 배열/슬라이스/맵 및 채널의 요소를 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!