>백엔드 개발 >Golang >범위를 사용하여 배열/슬라이스/맵 및 채널의 요소를 수정하는 방법

범위를 사용하여 배열/슬라이스/맵 및 채널의 요소를 수정하는 방법

PHPz
PHPz원래의
2023-04-05 10:29:22823검색

golang으로 프로그래밍할 때 배열, 슬라이스, 맵, 채널과 같은 데이터 구조를 순회하는 데 사용되는 range 키워드를 자주 사용합니다. 그러나 순회 프로세스 중에 순회된 요소를 수정하려는 경우 몇 가지 문제에 직면하게 됩니다. 이 문서에서는 범위를 사용하여 배열, 슬라이스, 맵 및 채널의 요소를 수정하는 방법을 설명합니다.

  1. 배열 및 슬라이스 요소 수정

배열 및 슬라이스를 순회할 때 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는 코드에서 요소의 포인터를 저장하고 포인터를 통해 요소의 값을 수정하는 데 사용됩니다.

  1. 지도 요소 수정

지도를 탐색할 때 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
}

코드에서 지도를 탐색할 때 키는 요소에 액세스하고 해당 값을 수정하는 데 사용됩니다. 맵의 요소 값을 수정할 때는 포인터를 사용할 필요가 없습니다.

  1. 채널의 요소 수정

채널을 탐색할 때 range 키워드는 요소 자체가 아닌 요소의 복사본을 반환합니다. 따라서 채널의 요소를 수정하려면 채널의 전송 작업을 사용하여 채널의 값을 수정해야 합니다. 다음은 채널의 요소를 수정하기 위한 코드 예제입니다.

ch := make(chan int, 3)
ch <- 1
ch <- 2
ch <- 3

for i := range ch {
  ch <- i*2
}

코드에서 채널의 전송 작업은 요소의 값을 원래 값의 두 배로 수정하는 데 사용됩니다. 채널의 요소를 수정할 때 채널의 전송 작업을 사용하여 수정된 값을 채널로 보내야 한다는 점에 유의해야 합니다.

요약:

range 키워드를 사용하여 배열, 슬라이스, 맵 및 채널을 순회할 때 순회된 요소를 수정하려면 요소(배열 및 슬라이스)의 포인터를 사용하고 키를 사용하여 액세스해야 합니다. 또는 요소(채널)의 값을 수정하려면 채널의 전송 작업을 사용하세요. Range를 사용하여 요소를 수정할 때 무한 루프나 루프 내 경쟁 조건과 같은 문제가 발생하지 않도록 주의해야 합니다.

위 내용은 범위를 사용하여 배열/슬라이스/맵 및 채널의 요소를 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.