가장 빨리 만나는 Go 언어 Unit 24.2 리턴값 여러 개 사용하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

함수 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

리턴값 여러 개 사용하기

Go 언어는 함수에서 값을 여러 개 리턴할 수 있습니다. 지금까지 다른 언어들은 함수에서 값을 여러 개 받기 위해 매개변수에서 레퍼런스, 포인터 타입을 사용하거나, 클래스 및 구조체의 인스턴스를 활용하는 등 다양한 방법을 사용했습니다. 하지만 Go 언어는 문법적으로 값을 여러 개 리턴할 수 있으므로 코드가 좀 더 짧고 간단합니다.

  • func 함수명(매개변수명 자료형) (리턴값_자료형1, 리턴값_자료형2) { }

이번에는 합과 차를 동시에 리턴하는 함수를 만들어보겠습니다.

func SumAndDiff(a int, b int) (int, int) { // int형 리턴값이 두 개인 함수 정의
	return a + b, a - b // 리턴할 값 또는 변수를 차례대로 나열. 합과 차를 동시에 리턴
}

func main() {
	sum, diff := SumAndDiff(6, 2) // 변수 두 개에 리턴값 두 개를 대입
	fmt.Println(sum, diff)        // 8 4: 합과 차
}
실행 결과
8 4

( ) (괄호)안에 리턴값 자료형을 , (콤마)로 구분하여 여러 개 지정해주면 됩니다. 함수 안에서 값을 리턴할 때도 return에 값을 , (콤마)로 구분하여 여러 개 지정합니다.

리턴값을 받을 때는 sum, diff :=처럼 변수를 콤마로 구분하여 여러 개 지정합니다. 여기서 리턴값은 함수에서 지정한 순서대로 리턴됩니다. 따라서 리턴값을 받을 변수 하나만 지정하면 첫 번째 리턴값만 저장됩니다.

첫 번째 리턴값은 생략하고 두 번째 리턴값부터 사용하고 싶다면 _ (밑줄 문자)를 사용합니다.

func SumAndDiff(a int, b int) (int, int) {
	return a + b, a - b // 리턴할 값 또는 변수를 차례대로 나열
}

func main() {
	_, diff := SumAndDiff(6, 2) // 첫 번째 리턴값은 _으로 생략, 두 번째 리턴값만 사용
	fmt.Println(diff)           // 4: 차
}
실행 결과
4

다음과 같이 리턴값 여러 개 가운데 특정 값만 생략할 수도 있습니다. 리턴값 다섯 개 중에서 첫 번째, 세 번째, 다섯 번째만 사용하고, 나머지는 밑줄 문자를 사용하여 생략합니다.

func hello() (int, int, int, int, int) {
	return 1, 2, 3, 4, 5 // 리턴할 값을 차례대로 나열
}

func main() {
	a, _, c, _, e := hello() // 2, 4번째 리턴값은 생략
	fmt.Println(a, c, e)     // 1 3 5
}

값을 여러 개 리턴할 때도 리턴값에 이름을 정할 수 있습니다.

  • func 함수명(매개변수명 자료형) (리턴값_변수명1 자료형, 리턴값_변수명2 자료형) { }
func SumAndDiff(a int, b int) (sum int, diff int) { // 리턴값을 각각 sum, diff로 이름을 정함
	sum = a + b  // 리턴값 변수 sum에 합 대입
	diff = a - b // 리턴값 변수 diff에 차 대입
	return
}

func main() {
	sum, diff := SumAndDiff(6, 2)
	fmt.Println(sum, diff) // 8 4
}
실행 결과
8 4

마찬가지로 리턴값 변수에 값을 대입하고 함수의 맨 마지막에 return을 사용하며 return 뒤에는 리턴할 변수를 지정하지 않습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2015-06-01