[TIL] Go에서 Tuple

Go에 사실 Tuple은 없다. 공식적으로는 지원하지는 않는다. 하지만 마치 Tuple이 있는 것처럼 사용되는 케이스가 가끔 있다. 대표적인 방법 2가지를 살펴본다.

func notTuple(x int) (int, int) {
	return x, x * x
}

n1, n2 := notTuple(2)
n3, _ := notTuple(3)

Tuple은 없다. 하지만 함수의 리턴값은 마치 python에서 튜플을 리턴하는 것처럼 리턴할 수 있고, 변수로 받을 수 있다.

한편 Go는 컴파일 언어이므로 변수를 선언하고 사용하지 않으면 컴파일 에러가 발생한다. 하지만 언더스코어(”_”)로 리턴값을 받아주면 무시된다. 언더스코어로 리턴값을 받는 변수를 선언하는 것은 이 값을 사용하지 않겠다는 명시적인 의미다.

x1, x2 := 1, 2
x1, x2 = x2, x1

언어에 따라 이런 swap을 지원하는 경우도 있고 아닌 경우도 있다. Go는 지원한다. 임시변수를 사용하지 않더라도 간단하게 두 변수의 값을 swap할 수 있다.

Go를 보다 보면 생각보다 좋은 기능들이 많다. 알고리즘 문제를 풀 때 Go를 사용해 봐야겠다.