为了账号安全,请及时绑定邮箱和手机立即绑定

在Go中仅返回多个返回值中的一个

在Go中仅返回多个返回值中的一个

Go
忽然笑 2021-05-13 18:27:55
是否有更好的方法仅返回多个返回值中的一个?func makeRune(s string) (r rune) {    r, _ = utf8.DecodeRuneInString(s)    return}
查看完整描述

1 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

是的。您应该添加注释以说明执行此操作的原因。由于执行此操作的动机常常被误导,因此人们会对它提出质疑,就像在对您的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函数的语义。


查看完整回答
反对 回复 2021-05-24
  • 1 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信