Go - 반복문 (for) 그리고 range와 ...args 살펴보기

Corner·2022년 5월 17일
0

Go

목록 보기
6/9

Picture


Go 에서 반복문은..

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처리 한다는 것을 잊지마세요. (사용하지 않을 때)

profile
Full-stack Engineer. email - corner3499@kakao.com,

0개의 댓글