我有一个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
}
基本上我要做的是将返回变量response
和e
设置为doNetworkThing()的第一个结果,该结果不会失败。
问题是,一旦我退出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
}
答案 0 :(得分:5)
下面的代码似乎有效(编译)。经过测试here。
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
声明,因为它已经在您命名返回值时已经声明。:=
更改为=
因为(再次)变量已经声明return response, e
更改为return
,因为返回值已命名为希望它有所帮助! :)
答案 1 :(得分:1)
在这个特定的例子中,你可以退出循环:从而解决2个方法来打破循环并返回值。
func (dbs *myClient) DoStuff() (response []byte, e error) {
for i:=0;i<5;i+=1 {
response, e = dbs.doNetworkThing()
if e == nil {
return response, e
}
}
}