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 중국어 웹사이트의 기타 관련 기사를 참조하세요!