2013-06-10 3 views
3

interface{}이 알려진 키/값 유형의지도입니다 여부를 테스트 할 수 있지만 : 주요 신경 쓰지 않고키/값 유형을 모른 채 인터페이스 {}가지도인지 테스트하는 방법은 무엇입니까?

func TypeTest(thing interface{}) { 
    switch thing.(type) { 
    case map[string]string: 
     fmt.Println("map string string") 
    case map[string]interface{}: 
     fmt.Println("map string") 
    case map[interface{}]interface{}: 
     fmt.Println("map") 
    case interface{}: 
     fmt.Println("interface") 
    default: 
     fmt.Println("unknown") 
    } 
} 
TypeTest(map[string]string{"a": "1"}) // "map string string" 
TypeTest(map[string]int{"a": 1}) // "interface" !!! 

하지만 제가 그냥 interface{}이지도인지 여부를 알고 싶다면/값 유형?

+3

는 http://play.golang.org/p/6hm_ZxZDmZ – deemok

+0

나는 당신이, deemok, 대단히 감사합니다 것 같아! –

답변

9

reflect 패키지를 사용할 수 있습니다.

package main 

import "fmt" 
import "reflect" 

func main() { 
    m := make(map[string]int) 

    fmt.Printf("%v\n", isMap(m)) 
} 

func isMap(m interface{}) bool { 
    rt := reflect.TypeOf(m) 
    return rt.Kind() == reflect.Map 
} 
관련 문제