如何在Golang中检查接口是否为map[string]string类型

9

我想检查输出变量是否为map[string]string类型,同时它应该是一个指针。

我已经检查了指针的值。但我不知道如何检查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
}

1
使用type switchtype assertion。请参考这个可能的重复问题+答案:如何检查interface{}是否为slice - icza
确定了,所以我知道这是一个映射!如何检查它是map[string]string还是map[string]int等等... - ahmdrz
1个回答

26

你完全不需要使用反射。一个简单的类型断言就足够了;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接