이번 편의 목표: 두 값 중 작지 않은 쪽을 고르는 함수를, 정수에 한정하지 않고 비교 가능한 타입으로 적습니다.

함수 이름 뒤의 [T cmp.Ordered]가 타입 매개변수입니다. cmp.Ordered는 크기 비교가 되는 타입이라는 조건입니다. 호출하는 곳의 인자에서 T가 정해집니다.

Go
package main

import (
	"cmp"
	"fmt"
)

func larger[T cmp.Ordered](left, right T) T {
	if left >= right {
		return left
	}
	return right
}

func main() {
	fmt.Println(larger(3, 5))
}

출력은 5입니다. 3과 5는 둘 다 int이므로 T는 int입니다. 한 호출 안에서 left와 right의 타입은 같아야 합니다. 정수와 문자열을 한 호출에 섞을 수 없습니다.

타입 매개변수가 없으면 정수용 함수와 문자열용 함수를 따로 만들어야 합니다. 조건이 Ordered이므로 비교 연산이 없는 구조체는 이 함수에 넘기지 못합니다.

직접 해 보기

larger(10, 7)을 출력해 10이 나오는지 확인하세요.

해설

10이 7보다 작지 않으므로 left가 반환됩니다. 비교 방향은 함수 안의 >= 입니다.