是否可以在语句期间从函数(具有多个返回值)中获取单个值?

例如,假设返回和和一个,我想将int返回值追加到字符串中。我知道如何在go中做到这一点的方法是:add(int, int)interror

foo := ""
bar, _ := add(1, 2)
foo += strconv.Itoa(bar)

但是,如果没有返回错误变量,我可以只做.add()foo += strconv.Itoa(add(1, 2))

是否可以在语句期间忽略 error 变量来执行类似操作?


守着星空守着你
浏览 68回答 2
2回答

桃花长相依

是否可以在语句期间忽略 error 变量来执行类似操作?不,Go没有为这样的东西提供任何语言结构。(但你可以有自己的必须...函数,如您将在包正则表达式或文本/模板中找到的函数。

慕容708150

免责声明(我的观点):这个答案只是为了好玩。我不建议使用这个。忽略错误是不好的,试图压缩每一行代码都是愚蠢的。这只是说明了一些关于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{}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go