🐾 [golang] for range 공부하기
- 여러 타입의 각 요소를 순회하는 구문이다.
- 배열, 문자열, 슬라이스, 맵 등에서 사용한다
기본 구조
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 타입
- rune 타입를 int32로 재정의한다고 한다.
- rune 타입은 유니코드를 표현하는 타입이다.
참조 참조링크
맵 예시
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가 먼저 출력되는 느낌이다