Range

Range->Range 문 #

// _range_는 다양한 데이터 구조의 요소들을 순회합니다.
//  우리가 이미 배운 몇 가지 데이터 구조와 함께 `range`를 사용하는 방법을 살펴봅시다.

package main

import "fmt"

func main() {

	// 다음 예시는 슬라이스에 있는 숫자들을 더하기 위해 `range`를 사용합니다.
	//  배열에서도 똑같이 동작합니다.
	nums := []int{2, 3, 4}
	sum := 0
	for _, num := range nums {
		sum += num
	}
	fmt.Println("sum:", sum)

	// `range`를 배열과 슬라이스에서 사용하면 각 원소의 인덱스와 값을 반환합니다.
	//  위 예시에선 인덱스가 필요 없었기 때문에 공백 식별자 `_`로 인덱스를 무시했습니다.
	//  다음 예시처럼 인덱스가 필요할 때도 있습니다.
	for i, num := range nums {
		if num == 3 {
			fmt.Println("index:", i)
		}
	}

	// 맵에서 `range`는 key/value 쌍들을 순회합니다.
	kvs := map[string]string{"a": "apple", "b": "banana"}
	for k, v := range kvs {
		fmt.Printf("%s -> %s\n", k, v)
	}

	// `range`로 map의 키값들만 순회할 수도 있습니다.
	for k := range kvs {
		fmt.Println("key:", k)
	}

	// 문자열에서 `range`는 유니코드 코드 포인트들을 순회합니다.
	//  첫번째 값은 `rune`의 시작 바이트 위치이며 두번째 값은 `rune`값 자체입니다.
	for i, c := range "go" {
		fmt.Println(i, c)
	}
}
$ go run range.go
sum: 9
index: 1
a -> apple
b -> banana
key: a
key: b
0 103
1 111