我想检查输出变量是否是map[string]字符串。输出应该是一个map[string]字符串,并且应该是ptr类型。
我检查了ptr值。但是我不知道如何检查map的键是否为字符串
对不起,我的英语不好
import (
"fmt"
"reflect"
)
func Decode(filename string, output interface{}) error {
rv := reflect.ValueOf(output)
if rv.Kind() != reflect.Ptr {
return fmt.Errorf("Output should be a pointer of a map")
}
if rv.IsNil() {
return fmt.Errorf("Output in NIL")
}
fmt.Println(reflect.TypeOf(output).Kind())
return nil
}
您根本不必为此使用反射。一个简单的类型断言就足够了;
unboxed, ok := output.(*map[string]string)
if !ok {
return fmt.Errorf("Output should be a pointer of a map")
}
if unboxed == nil {
return fmt.Errorf("Output in NIL")
}
// if I get here unboxed is a *map[string]string and is not nil