go - 如何返回空接口类型映射的键值
问题描述
我采用了一个变量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)
}
解决方案
v, found := u[k]
这里 v 是interface{}
类型
但是您的函数返回类型是 (string, nil) 您返回 (v, nil) 或 (interface{}, nil)。
interface{}
不能自动转换成字符串,需要类型断言。
data, ok := v.(string)
您也可以返回interface{}
,消费者可以决定它将转换哪种类型。
推荐阅读
- java - 如何继续检查 Firebase 中的空值
- javascript - 如何在 HTML 表格中的单元格中输入文本?
- javascript - 在 react 中通过本地 JSON 文件映射大数据需要一些时间来加载。如何解决?
- java - 如何使用java通过代理获取gmail收件箱消息
- python - 使用 Python 请求的 fastapi 连接
- apache - Apache不需要的_access日志文件
- r - 将表转换为另一个表(将行中的数据转换为列)
- algorithm - 如果给出重复,我如何编写伪代码
- ckeditor5 - ckeditor 5,图像src到data-src
- django - 在 Django 中仅过滤普通用户而不是员工或超级用户