2 回答
TA贡献1860条经验 获得超8个赞
是否可以在语句期间忽略 error 变量来执行类似操作?
不,Go没有为这样的东西提供任何语言结构。
(但你可以有自己的必须...函数,如您将在包正则表达式或文本/模板中找到的函数。
TA贡献1831条经验 获得超4个赞
免责声明(我的观点):这个答案只是为了好玩。我不建议使用这个。忽略错误是不好的,试图压缩每一行代码都是愚蠢的。这只是说明了一些关于Go如何处理多个返回值的有趣概念,我在写这篇文章时学到了一些新东西,所以我想我会分享。
相关:这个问题更实际的表亲是“Must模式”,由一些标准库(包括模板)使用。它涉及获取值和错误,如果错误不是nil,则返回该值。请参阅此(当前冻结的)提案panic
您需要一个包装器函数来执行此操作。多个返回值将自动展开以填充参数。
请参阅此示例,它与add()
func ignoreError(i int, err error) int {
return i
}
叫:
foo := ""
foo += strconv.Itoa(ignoreError(add(1, 2)))
下面是一个更通用的替代方法,它将从另一个函数中获取任意数量的值并返回第一个值。
func takeFirstValue(v ...interface{}) interface{} {
if len(v) == 0 {
return nil
}
return v[0]
}
叫:
foo := ""
foo += strconv.Itoa(takeFirstValue(add(1, 2)).(int))
此选项需要在调用站点进行强制转换以还原数据类型,因为 takeFirstValue 返回 。.(int)interface{}
- 2 回答
- 0 关注
- 67 浏览
添加回答
举报