>백엔드 개발 >Golang >Go에서 값 유형은 다르지만 키 유형은 동일한 맵을 어떻게 처리할 수 있나요?

Go에서 값 유형은 다르지만 키 유형은 동일한 맵을 어떻게 처리할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-27 04:15:10916검색

How Can I Handle Maps with Different Value Types But the Same Key Type in Go?

맵 처리에서 유형 불일치 극복

문제:
Go에서 맵 작업을 할 때 다음 키를 사용하는 것이 바람직한 경우가 많습니다. 같은 유형이지만 다른 유형의 값입니다. 그러나 인터페이스{}를 값 유형으로 사용하는 키 유형을 사용하는 함수를 생성하려고 하면 제약이 있습니다.

접근 실패:

func main() {
    mapOne := map[string]int
    mapTwo := map[string]double
    mapThree := map[string]SomeStruct

    useKeys(mapOne)
}

func useKeys(m map[string]interface{}) {
    //something with keys here
}

위 코드는 유형 불일치로 인해 컴파일되지 않습니다. Go의 맵은 공변적이지 않습니다. 즉, 동일한 키 유형으로 다른 값 유형을 허용할 수 없습니다.

해결책:

이 문제에 대한 우아한 해결책은 없습니다. Go의 고유한 한계로 인해 리플렉션을 사용하는 해결 방법이 있습니다.

func useKeys(m interface{}) {
    v := reflect.ValueOf(m)
    if v.Kind() != reflect.Map {
        fmt.Println("not a map!")
        return
    }

    keys := v.MapKeys()
    fmt.Println(keys)
}

이 코드는 인터페이스{} 값을 사용하고 리플렉션을 사용합니다. 지도인지 확인합니다. 그렇다면 해당 맵의 키를 추출하여 인쇄합니다.

참고:

리플렉션 사용의 한계를 염두에 두는 것이 중요합니다. 런타임 성능 오버헤드와 복잡성이 발생합니다. 가능하다면 특정 값 유형에 대해 특정 맵 유형을 사용하는 것이 성능 및 유지 관리 용이성을 위해 선호되는 접근 방식입니다.

위 내용은 Go에서 값 유형은 다르지만 키 유형은 동일한 맵을 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.