괴발개발 성장기

Study/Go 언어

[golang] for range 공부하기

지니유 2022. 2. 13. 23:08
반응형

 

 

 

 

 

 

 

  • 여러 타입의 각 요소를 순회하는 구문이다.
  • 배열, 문자열, 슬라이스, 맵 등에서 사용한다

# 기본 구조

for 인덱스, 값 := range 배열,문자열,슬라이스,맵 {
    fmt.Println("index : ", index, " value : ", value)
}
  • 각 요소를 순회하면서 인덱스와 값을 반환합니다.

# 인덱스 필요없는 경우

for _, 값 := range 배열,문자열,슬라이스,맵 {
    fmt.Println("index : ", index, " value : ", value)
}
  • 인덱스가 필요없는 경우 _ (밑줄)을 이용하여 사용하지 않는다는 표시를 하면 된다.

# 배열 예시

예시

nums := [5]int{1,2,3}

for index, value := range nums {
    fmt.Println("index : ", index, " value : ", value)
}
  • 배열을 예시로 들었다. 길이가 5인 배열을 순회하는 것이다.

결과

index :  0  value :  1
index :  1  value :  2
index :  2  value :  3
index :  3  value :  0
index :  4  value :  0

# 슬라이스 예시

    slice := []int{1, 2, 3}
    for index, value := range slice {
        fmt.Println("index : ", index, " value : ", value)
    }
  • 슬라이스는 요소값이 정하지 않아도 된다. 그래서 있는 값만 순회에 출력한다.

결과

index :  0  value :  1
index :  1  value :  2
index :  2  value :  3

# 문자열 예시

    str := "안녕! Genie"
    for index, value := range str {
        fmt.Println("index : ", index, " value : ",value , "rune 타입을 string : ",string(value))
    }

결과

index :  0  value :  50504 rune 타입을 string :  안
index :  3  value :  45397 rune 타입을 string :  녕
index :  6  value :  33 rune 타입을 string :  !
index :  7  value :  32 rune 타입을 string :   
index :  8  value :  71 rune 타입을 string :  G
index :  9  value :  101 rune 타입을 string :  e
index :  10  value :  110 rune 타입을 string :  n
index :  11  value :  105 rune 타입을 string :  i
index :  12  value :  101 rune 타입을 string :  e

 

값의 타입이 rune 타입이라고 책에 적혀있었는데 값이 숫자로 나와서 당황했다.
그래서 type를 보니까 int32로 나왔다. 처음엔 아스키코드인가 생각했다.
rune 타입이 낯설어서 찾아봤다.

 

rune 타입

1) rune 타입를 int32로 재정의한다고 한다.
2) rune 타입은 유니코드를 표현하는 타입이다.

 

참조 

https://caileb.tistory.com/199

 

go - rune 타입 (한글, 유니코드, UTF-8)

rune (한글, 유니코드, UTF-8) rune 타입은 다른 언어에서 잘 볼 수 없는 타입이다. 타입의 이름을 왜 rune으로 정의했을까 궁금증으로 찾아보니, 룬 문자(runic alphabets)에서 가져온건 아닐까 생각된다.

caileb.tistory.com


 

 

# 맵 예시

    maps := map[string]string{"name": "Genie", "age": "20"}
    for key, value := range maps {
        fmt.Println("key : ", key, " value : ", value)
    }
  • key값은 정렬 되지 않는다. 뭐가 먼저 출력될지 모른다.

 

 

결과

index :  name  value :  Genie
index :  age  value :  20
index :  age  value :  20
index :  name  value :  Genie
  • name이 먼저 출력될지 age가 먼저 출력될지 모른다. 10번에 1번은 age가 먼저 출력되는 느낌이다

 

 

 

 

 

 

반응형

'Study > Go 언어' 카테고리의 다른 글

[golang] 구조체(struct) 공부하기  (0) 2022.02.18
[golang] 배열 공부하기  (0) 2022.02.14
[golang] for문 공부하기  (0) 2022.02.12
[golang] switch문 공부하기  (0) 2022.02.11
[golang] if문 공부하기  (0) 2022.02.10