Go语言函数返回时如何强制返回map访问的两个值
编译报错的核心原因
Go 语言的 map 索引操作的返回值数量完全由所在上下文决定:
- 只有当 map 索引被用于「左侧带两个接收变量的赋值场景」时,才会返回
(键对应的值, 键是否存在)的二元结果 - 直接写
return bag[key]时,Go 会把这个表达式判定为单值输出,哪怕函数签名要求返回两个值,也会触发返回值数量不匹配的编译错误。
适配Go 1.15的解决方案
这个场景没有版本兼容问题,只需要在return前显式用两个变量接收map的二元返回值,再将这两个变量返回即可,修正后的完整代码:
var bag = make(map[string]interface{}, 0) var mux = sync.Mutex{} // Retrieves data func Get(key string) (interface{}, bool) { mux.Lock() defer mux.Unlock() value, exists := bag[key] return value, exists }
补充说明:这种上下文触发的返回值设计是Go的原生语法特性,目的是兼容日常单值取map的轻量化写法,只有当你明确声明要接收第二个存在性标记时,map才会返回二元结果。
内容的提问来源于stack exchange,提问作者user8555937
相关产品推荐
相关产品推荐

