Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 返回循环的函数状态_Function_Go - Fatal编程技术网

Function 返回循环的函数状态

Function 返回循环的函数状态,function,go,Function,Go,我有一个在响应列表上迭代的函数,如果成功打印ok或error,最后(在函数完成执行后),我需要返回http 200(如果ok或200条件始终有效)或http 500(如果失败)(甚至一次失败)。我可以使用一些标志(我希望避免)但在Golang有更干净的方法吗 func getResults(results chan resultsList) { for res := range results { if res.Data != "ok" &&a

我有一个在响应列表上迭代的函数,如果成功打印ok或error,最后(在函数完成执行后),我需要返回http 200(如果
ok
200
条件始终有效)或http 500(如果失败)(甚至一次失败)。我可以使用一些标志(我希望避免)但在Golang有更干净的方法吗

func getResults(results chan resultsList) {
    for res := range results {
        if res.Data != "ok" && res.Data != 200 {
            fmt.Println("error")
        } else {
            fmt.Printf("finish time %s \n", res.Name)
        }
    }
}

我要说的是,您编写它的方式已经相当干净了,为了改进它,您可以使用无标记switch语句,这将允许重叠条件,这意味着您可以为可能发生的每个错误返回详细的错误消息

除此之外,您还可以在if块中放入break语句,这取决于您是想知道所有错误还是发生了任何错误。

在这些情况下,我更喜欢“尽早返回”样式。以下是一些例子:

import (
   "fmt"
   "log"
)

func getResults(results chan resultsList) error {
   for res := range results {
      if res.Data != "ok" || res.Data != 200 {
         return fmt.Errorf("Data: %v", res.Data)
      }
      fmt.Println("finish time", res.Name)
   }
   return nil
}

func main() {
   e := getResults(something)
   if e != nil {
      log.Fatal(e)
   }
}

好的,但是您建议如何返回最终结果?如果一次迭代失败,返回500,如果所有成功返回200…取决于您是否希望实际返回这些值/结果。如果您只是想打印出有错误,那么您不需要返回任何内容,只需打印即可。如果要根据发生的错误采取措施,则可以返回一个无符号整数片段,并对其进行迭代,或将逻辑直接写入所提供的函数中。如果函数即使只返回一次失败,也应返回失败,为什么要在第一次失败后继续处理通道?还是因为其他原因?