命名的返回变量未在for循环中设置

nci*_*iao 0 variables scope function go

我有一个GoLang函数,试图在FOR循环中设置一些命名的返回变量.它看起来像这样:

func (dbs *myClient) DoStuff() (response []byte, e error) {
    for i:=0;i<5;i+=1 {
        response, e = dbs.doNetworkThing()
        if e == nil {
            break;
        }
    }
    return response, e
}
Run Code Online (Sandbox Code Playgroud)

基本上我想要做的是设置返回变量responseedoNetworkThing()的第一个结果,它不会失败.

问题是,一旦我退出for循环response,e就会重置.在GoLang做这样的事情的正确方法是什么?

我真的想使用命名的返回变量,因为它们使事情更容易阅读(我认为这样的事情是一个丑陋的解决方案).

// Seems to be an ugly solution - would prefer using named return vars
func (dbs *myClient) DoStuff() ([]byte, error) {
    var response []byte
    var e error
    for i:=0;i<5;i+=1 {
        response, e := dbs.doNetworkThing()
        if e == nil {
            break;
        }
    }
    return response, e
}
Run Code Online (Sandbox Code Playgroud)

And*_*ldo 5

下面的代码似乎工作(编译).在这里测试.

func (dbs *myClient) DoStuff() (response []byte, e error) {
    for i:=0;i<5;i+=1 {
        response, e = dbs.doNetworkThing()
        if e == nil {
            break;
        }
    }
    return
}
Run Code Online (Sandbox Code Playgroud)

我做了什么:

  1. 我删除了responsee声明,因为它已经在您命名返回值时已经声明了.
  2. 改为:=,=因为(再次)变量已经被声明
  3. return response, ereturn因为返回值被命名为

希望能帮助到你!:)