Go에서 루프는 오로지 for문만 사용할 수 있습니다.
forEach, .map, for in , for of, while, do while 등등 많고 많은 반복문이 있지만 Go에는 for만 있습니다.
매우 간단합니다.
반복문을 사용하는데 다른 방식을 사용하지 않아도 되는 점 이라던가.. 고민하면서 머리 굴릴 필요조차 없습니다.
for을 쓰는 가장 좋은 방법은 function에서 활용하는 것입니다.
코드를 보면서 설명하겠습니다.
먼저 superAdd라는 함수를 만들겠습니다.
func superAdd(numbers ...int) int {
fmt.Println(numbers)
return 1
}
그리고 메인 함수에는 superAdd 함수에 인자를 많이 넣어보겠습니다.
func main() {
superAdd(1, 2, 3, 4, 5, 6, 7)
}
결과를 보면 [1, 2, 3, 4, 5, 6, 7] 값들이 나옵니다.
이것은 Array(배열)인데, 이 배열안에서 반복문을 일어나게 하려면 range
를 사용해야합니다.
이제 superAdd라는 함수에 1+2+3+4+5+6..
을 하기 위해서 range
라는 것을 사용할 것입니다.
func superAdd(numbers ...int) int {
for number := range numbers {
// range가 number 안에서 조건에 따라 반복문을 실행 하도록 해줍니다.
// 자바스크립트의 forEach처럼 말이죠!
fmt.Println(number)
}
return 1
}
리턴 1을 하는 이유는 의미가 없습니다. 단지 함수 리턴값이 int 타입으로 선언되었기 때문에 무조건 자료형에 맞는 값으로 반환해야합니다.
그리고 실행하여 결과를 보면
0
1
2
3
4
5
6
순차적으로 배열이 아닌 값으로 나오게됩니다. 또한, 1,2,3,4,5,6,7 값을 넣은 것과 달리 0~6 값을 뱉어내고 있습니다.
왜냐면 range는 index를 줍니다. 그리고 값도 줍니다.
vue.js를 해보셨다면 조금 익숙한 v-for문입니다.
v-for="(data, index) in dataList"
처럼 말이죠! 다만 차이점이 있다면 data값과 index값의 자리가 바뀌었습니다.
superAdd 함수에 for index, number := range numbers { ...}
로 수정해줍니다.
1 0
2 1
3 2
4 3
5 4
6 5
7 6
결과대로 보다시피 왼쪽 라인에는 number, 오른쪽 라인에는 index값이 출력됩니다.
다른 방법도 있습니다.
for i := 0; i < len(numbers); i++ {
fmt.Println(numbers[i])
}
--- 결과
1
2
3
4
5
6
7
for문의 원초적인 방법으로 배열에 인덱스 자리에 index값을 넣어 순차적으로 값을 꺼내오는 방식입니다.
어떤 코드가 짧고, 더 좋은지 판단해서 사용하면됩니다.
이제 range를 사용하여 함수에 넣은 값들을 모두 더해서 출력할 수 있습니다.
func superAdd(numbers ...int) int {
total := 0
for _, number := range numbers {
total += number
}
return total
}
func main() {
total := superAdd(1, 2, 3, 4, 5, 6, 7)
fmt.Println(total)
}
-----
결과 : 28
_
언더바는 ignore처리 한다는 것을 잊지마세요. (사용하지 않을 때)