PHpullh

GO · 기초 문법

타입 추론

Go 컴파일러는 인자 타입에서 타입 파라미터를 자동 추론합니다. 명시적 타입 인자가 불필요한 경우가 대부분입니다.

기초 문법중급type-inferencegenericsfilterzip

핵심 설명

Go 컴파일러는 인자 타입에서 타입 파라미터를 자동 추론합니다. 명시적 타입 인자가 불필요한 경우가 대부분입니다.

Go code

package main

import "fmt"

func Filter[T any](slice []T, pred func(T) bool) []T {
	var result []T
	for _, v := range slice {
		if pred(v) {
			result = append(result, v)
		}
	}
	return result
}

func Zip[A, B any](a []A, b []B) []struct{ First A; Second B } {
	n := len(a)
	if len(b) < n { n = len(b) }
	result := make([]struct{ First A; Second B }, n)
	for i := 0; i < n; i++ {
		result[i] = struct{ First A; Second B }{a[i], b[i]}
	}
	return result
}

func main() {
	// 타입 추론: [int] 생략 가능
	evens := Filter([]int{1, 2, 3, 4, 5}, func(n int) bool {
		return n%2 == 0
	})
	fmt.Println(evens) // [2 4]

	pairs := Zip([]string{"a", "b"}, []int{1, 2})
	fmt.Println(pairs)
}

학습 팁

타입 추론이 실패하는 경우(반환 타입만으로 추론 필요) 명시적으로 타입 인자를 제공하세요: Func[int](...)

주의할 점

제네릭 타입(구조체)을 인스턴스화할 때는 타입 추론이 불가능합니다. Stack[int]{}처럼 항상 타입을 명시해야 합니다.

자주 묻는 질문

타입 추론란 무엇인가요?

Go 컴파일러는 인자 타입에서 타입 파라미터를 자동 추론합니다. 명시적 타입 인자가 불필요한 경우가 대부분입니다.

타입 추론 학습 시 주의할 점은 무엇인가요?

제네릭 타입(구조체)을 인스턴스화할 때는 타입 추론이 불가능합니다. Stack[int]{} 처럼 항상 타입을 명시해야 합니다.