Go by Example: [11] Range

Range

range키워드는 복합데이터구조(배열,슬라이스, 맵등)의 데이터를 나열할때 유용하게
사용할 수 있는 키워드입니다.

이미 배운 이러한 데이터구조의 항목을 나열하는 것으로 사용법을 익히도록 하겠습니다.

package main

import "fmt"

func main() {
    
    nums := []int{2, 3, 4}             // [1]
    sum := 0
    
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)
    
    for i, num := range nums {         // [2]
        if num == 3 {
            fmt.Println("index:", i)
        }
    }
    
    kvs := map[string]string{"a": "apple", "b": "banana"}   // [3]
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }
    
    for i, c := range "go" {           // [4]
        fmt.Println(i, c)
    }
}
  1. range키워드를 슬라이스에 사용하는 예제입니다. 배열 또한 사용법이 동일합니다.
  2. range키워드를 배열과 슬라이스에 사용할때에도 인덱스을 제공합니다.
    상기의 코드에서는 인덱스값이 필요없고 값만 필요한 경우여서 _변수를 이용해서
    인덱스값을 버렸습니다.
    때로는 혹은 자주 배열과 슬라이스의 인덱스값이 연산에 필요할 때가 있습니다.
  3. range키워드를 맵의 키/값 항목에 사용해서 각 요소에 순차적으로 접근합니다.
  4. range키워드는 유니코드의 각 문자를 열거할때 사용할 수 있습니다.
    유니코드글자 한글자는 rune타입에 저장되는데, 문자열에서의 인덱스값을 처음으로
    반환하고, rune형태의 글자 자체를 두번째로 반환합니다.

실행하면 다음과 같습니다.

$ go run range.go 
sum: 9
index: 1
a -> apple
b -> banana
0 103
1 111