在Go中只返回一个多个返回值

时间:2012-11-17 01:20:24

标签: go return-value

有没有更好的方法只返回一个多个返回值?

func makeRune(s string) (r rune) {
    r, _ = utf8.DecodeRuneInString(s)
    return
}

1 个答案:

答案 0 :(得分:7)

是。您应该添加注释,说明您为什么这样做。因为这样做的动机经常被误导,所以人们会质疑它,就像他们对你的OP的评论一样。如果你有充分的理由编写一个函数来抛出一个返回值,那么在评论中证明它是合理的。也许你可以写,

// makeRune helper function allows function chaining.
func makeRune(s string) (r rune) {
    // toss length return value.  for all use cases in this program
    // only the first rune needs to be decoded.
    r, _ = utf8.DecodeRuneInString(s)
    return
}

这也有助于按照经验法则进行代码审查,“如果评论和代码不一致,两者都可能是错误的。”如果不需要函数链,函数的整体目的是有问题的。如果您的评论提示您认为您丢失了错误值,那将是一个红旗。如果你的评论暗示你认为s只能包含一个符文,那么这也是一个红旗。鉴于我上面的示例评论,我可能会阅读我所写的内容,并决定将函数更好地命名为firstRune。这具有更具体的含义,并避免建议类似于Go make函数的语义。