PHpullh
학습 라이브러리/Go/comparable 제약

GO · 기초 문법

comparable 제약

comparable==!= 연산이 가능한 타입을 나타내는 내장 제약입니다. 맵 키 타입으로 사용됩니다.

기초 문법중급comparablegenericssetmap-key

핵심 설명

comparable==!= 연산이 가능한 타입을 나타내는 내장 제약입니다. 맵 키 타입으로 사용됩니다.

Go code

package main

import "fmt"

// comparable: ==, != 연산 가능한 타입
func Index[T comparable](slice []T, target T) int {
	for i, v := range slice {
		if v == target {
			return i
		}
	}
	return -1
}

// 맵 키로 사용
type Set[T comparable] map[T]struct{}

func NewSet[T comparable](items ...T) Set[T] {
	s := make(Set[T])
	for _, item := range items {
		s[item] = struct{}{}
	}
	return s
}

func (s Set[T]) Has(item T) bool {
	_, ok := s[item]
	return ok
}

func main() {
	fmt.Println(Index([]string{"a", "b", "c"}, "b")) // 1

	fruits := NewSet("apple", "banana", "cherry")
	fmt.Println(fruits.Has("banana")) // true
	fmt.Println(fruits.Has("grape"))  // false
}

학습 팁

comparable은 맵 키 타입이 충족해야 하는 제약과 동일합니다. 제네릭 세트, 캐시 등에 필수적으로 사용됩니다.

주의할 점

슬라이스, 맵, 함수 타입은 comparable을 만족하지 않습니다. 이들을 맵 키나 세트 원소로 사용할 수 없습니다.

자주 묻는 질문

comparable 제약란 무엇인가요?

comparable 은 == 와 != 연산이 가능한 타입을 나타내는 내장 제약입니다. 맵 키 타입으로 사용됩니다.

comparable 제약 학습 시 주의할 점은 무엇인가요?

슬라이스, 맵, 함수 타입은 comparable 을 만족하지 않습니다. 이들을 맵 키나 세트 원소로 사용할 수 없습니다.