首页 > 解决方案 > 如何返回空接口类型映射的键值

问题描述

我采用了一个变量var u = make(map[string]interface{}),这意味着一个键可以保存一个字符串/整数或另一个映射。

当我执行以下操作时,它会给出cannot use v (type interface {}) as type string in return argument: need type assertion看起来很明显的错误,因为通用地图不知道应该搜索什么。我该如何解决这个问题?代码如下(请注意,目前地图完全为空)

var u = make(map[string]interface{})

// Get function retrieves the value of the given key. If failed, it returns error.
func Get(k string) (string, error) {
    v, found := u[k]
    println(reflect.Type(v))
    if found {
        v = u[k]
        return v, nil
    }
    return v, errors.New(-1)
}

标签: gogo-map

解决方案


v, found := u[k]这里 v 是interface{}类型

但是您的函数返回类型是 (string, nil) 您返回 (v, nil) 或 (interface{}, nil)。

interface{}不能自动转换成字符串,需要类型断言。

data, ok := v.(string)

您也可以返回interface{},消费者可以决定它将转换哪种类型。


推荐阅读