func 中返回空,golang 中返回值[重复]

2023-12-25

我正在阅读一些编写的代码Golang在Github上发现了一段非常有趣的代码。我把它简化得更清楚了。

func  Insert(docs ...interface{}) (err error) {
    for i := 0; i < 3; i++ {
        err = fmt.Errorf("")
        if err.Error()!="EOF" {
            return
        }
    }
    return 
}

我对这里的空返回感到非常困惑......它是如何工作的?他是否返回 nil 作为错误或中断 for 循环?我知道这个问题看起来很虚伪,但我在 go 文档中找不到任何相关信息...另外,我不明白我们如何返回 err,据我所知,这是以某种方式声明的回报。 (err error) 是否意味着我们已经有一个可用的错误变量func如果没有指定,则使用哪个作为默认返回值?为什么我们在末尾隐式地返回错误func?

我将非常感谢您的解释。


该函数使用“命名”返回值。

From the spec https://golang.org/ref/spec#Return_statements关于返回语句:

如果函数的结果类型,则表达式列表可能为空 指定其结果参数的名称。结果参数作用 作为普通的局部变量,函数可以给它们赋值 有必要的。 “return”语句返回这些值 变量。

无论如何声明,所有结果值都是 在进入时初始化为其类型的零值 功能。指定结果集的“return”语句 执行任何延迟函数之前的参数。

使用命名返回可以让您节省一些手动分配局部变量的代码,并且有时可以清理混乱的 if/else 语句或长的返回值列表。

func a()(x []string, err error){
    return
}

实际上只是简写

func a() ([]string,error){
  var x []string
  var err error
  return x,err
}

它有点短,我同意它可能不太明显。

有时需要命名返回,因为它允许在延迟函数中访问它们之类的事情,但据我所知,裸返回只是语法糖,并且从来都不是严格要求的。

我经常看到的一个地方是在具有许多返回值的函数中出现错误返回情况。

if(err != nil){
   return
}
return a,b,c,nil

if(err != nil){
   return nil,nil,nil,err
}
return a,b,c,nil

当你必须写很多次的时候。如果您更改签名以获得额外的“真实”返回值,则不必修改这些返回值。

我在刚刚搜索的代码库中使用它们的大多数地方,它们似乎确实隐藏了其他气味,比如过于复杂的多用途函数、太深的 if/else 嵌套等等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

func 中返回空,golang 中返回值[重复] 的相关文章