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

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

Barbara Streisand
풀어 주다: 2025-01-01 07:35:10
원래의
970명이 탐색했습니다.

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

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

Go에서 맵은 키를 특정 값에 매핑하는 다목적 데이터 구조입니다. 그러나 값 유형이 다르더라도 여러 맵의 키를 활용하려는 상황이 발생할 수 있습니다. 다음 코드 조각을 고려해보세요.

1

2

3

4

5

6

7

8

9

10

11

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{} 유형의 변수에 할당할 수 있지만 오류 발생 없이 할당된 맵의 값을 안전하게 수정할 수 없음을 의미합니다.

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

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

1

2

3

4

5

6

7

8

9

10

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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿