>백엔드 개발 >Golang >값 유형에 관계없이 Go에서 맵 키에 어떻게 액세스할 수 있나요?

값 유형에 관계없이 Go에서 맵 키에 어떻게 액세스할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2025-01-01 07:35:10916검색

How Can I Access Map Keys in Go Regardless of Value Type?

고유한 값 유형을 사용하여 맵 작업

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
}

이 예에는 세 개의 맵이 있습니다. mapOne은 정수를 보유하고, mapTwo는 double 값을 저장하며, mapThree는 SomeStruct의 인스턴스를 포함합니다. 우리의 목표는 문자열 키와 인터페이스{}로 표시된 임의의 값 유형이 있는 맵을 허용하는 함수 useKeys를 만드는 것입니다. 그러나 이 디자인은 예상대로 작동하지 않습니다.

공분산의 도전

Go에서 맵과 슬라이스는 일반적인 구조이지만 공분산이 부족합니다. 이는 map[string]int를 map[string]interface{} 유형의 변수에 할당할 수 있지만 오류 발생 없이 할당된 맵의 값을 안전하게 수정할 수 없음을 의미합니다.

덜 우아함, 그러나 기능적 솔루션

값 유형에 관계없이 맵의 키만 얻어야 한다면 리플렉션을 사용할 수 있습니다.

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으로 문의하세요.