如何return key's value of a map of type empty interface
How to return key's value of a map of type empty interface
我使用了一个像 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, found := u[k]
这里 v 是 interface{}
类型
但是你的函数 return 类型是 (string, nil) 你正在 returning (v, nil) 或 (interface{}, nil).
interface{}
不能自动转换成字符串,需要类型断言。
data, ok := v.(string)
您也可以 return interface{}
并且消费者可以决定要转换的类型。
我不确定你的问题是什么。但是您收到此错误是因为您正在尝试 return interface{}
作为具体类型 string
。如果你想要 return 字符串,并且你确定 map 的值总是字符串(那你为什么使用 map[string]interface{}
而不是 map[string]string
?)你可以获得底层接口类型通过使用类型断言:
s, ok := v.(string)
我使用了一个像 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, found := u[k]
这里 v 是 interface{}
类型
但是你的函数 return 类型是 (string, nil) 你正在 returning (v, nil) 或 (interface{}, nil).
interface{}
不能自动转换成字符串,需要类型断言。
data, ok := v.(string)
您也可以 return interface{}
并且消费者可以决定要转换的类型。
我不确定你的问题是什么。但是您收到此错误是因为您正在尝试 return interface{}
作为具体类型 string
。如果你想要 return 字符串,并且你确定 map 的值总是字符串(那你为什么使用 map[string]interface{}
而不是 map[string]string
?)你可以获得底层接口类型通过使用类型断言:
s, ok := v.(string)