登录
首页 >  Golang >  Go问答

如何返回空接口类型的映射的键值

来源:stackoverflow

时间:2024-04-09 15:09:38 361浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《如何返回空接口类型的映射的键值》,涉及到,有需要的可以收藏一下

问题内容

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

当我执行以下操作时,它会给出错误 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)
}

解决方案


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

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

interface{} 无法自动转换为字符串,需要类型断言。

data, ok := v.(string)

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

我不确定您的问题是什么。但您收到此错误是因为您尝试将 interface{} 作为具体类型 string 返回。如果你想返回字符串,并且你确定map的值始终是字符串(那么你为什么使用map[string]interface{}而不是map[string]string?)你可以通过以下方式获取接口的底层类型使用类型断言:

s, ok := v.(string)

今天关于《如何返回空接口类型的映射的键值》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>