嗨,我有这个函数,我想返回一个docker.APIContainer和一个错误(如果没有错误则为nil),但如果出现错误,我应该在docker.APIContainer中返回什么?
这是代码
WebBeansContext currentInstance = WebBeansContext.currentInstance();
我应该添加什么而不是_?我是否有义务创建一个class Test{
public static void main(String[] args) {
int c=0,a,temp;
Scanner scn = new Scanner(System.in);
//It is the number to check armstrong
System.out.println("Enter the number to check");
int n=scn.nextInt();
temp=n;
while(n>0)
{
a=n%10;
n=n/10;
c=c+(a*a*a);
}
if(temp==c)
System.out.println("armstrong number");
else
System.out.println("Not armstrong number");
}
}
并将其归还?还是有另一种方式
答案 0 :(得分:1)
GetContainersRunningImage
会返回多个值:[]docker.Container
和string
,这意味着您必须返回两个具有完全相同类型签名的值,或者nil
以防{i}}不想返回具体的值。
因为您正在处理错误情况,所以在发生错误时可以返回nil
值:
if err != nil {
log.WithFields(logFields).Errorf("TLSClient could not be created: %s", err)
return nil, err.Error()
}
但是如果您没有收到错误,则必须在函数末尾返回一个值。在这种情况下,返回函数的类型签名应为:[]docker.Container
,string
。
这就是为什么Go中函数返回参数的惯用方法是值,如果发生错误则是错误。因为您在if语句中单独处理错误,该语句返回两个值:nil
而不是值和error
类型,最终返回值应为类型值,nil
表示错误
func GetContainersRunningImage(imagename string, tag string) ([]docker.Container,string) {
var contarray []docker.Container
logFields := log.Fields{
"handler": "get service",
}
client, err := docker.NewTLSClient(sconf.DockConf.Endpoint, sconf.DockConf.Cert, sconf.DockConf.Key, sconf.DockConf.Ca)
if err != nil {
log.WithFields(logFields).Errorf("TLSClient could not be created: %s", err)
return nil, err.Error()
}
return contarray, nil
}
其他可能性是使用_
(下划线)变量来忽略其中一个返回值,但这需要在变量赋值时发生。
答案 1 :(得分:0)
return nil, err.Error()
goreturns会自动为您执行此操作 - 0
表示int,""
表示字符串等。