如何在GO中只返回多个返回函数中的一个变量?

时间:2016-07-28 08:40:31

标签: go return

嗨,我有这个函数,我想返回一个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"); } } 并将其归还?还是有另一种方式

2 个答案:

答案 0 :(得分:1)

GetContainersRunningImage会返回多个值:[]docker.Containerstring,这意味着您必须返回两个具有完全相同类型签名的值,或者nil以防{i}}不想返回具体的值。

因为您正在处理错误情况,所以在发生错误时可以返回nil值:

if err != nil {
      log.WithFields(logFields).Errorf("TLSClient could not be created: %s", err)
      return nil, err.Error()
}

但是如果您没有收到错误,则必须在函数末尾返回一个值。在这种情况下,返回函数的类型签名应为:[]docker.Containerstring

这就是为什么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,""表示字符串等。