404响应后继续循环

时间:2017-10-20 05:13:43

标签: go

这可能是一个菜鸟问题,但我一直在谷歌搜索。

我在for循环中运行,每个循环都有不同的api请求

jiraClient, err := jira.NewClient(nil, *jiraURL)

if err != nil {
    panic(err)
}

jiraClient.Authentication.SetBasicAuth(*jiraUser, string(jiraPass))

reader := csv.NewReader(*file)
CSVData, err := reader.ReadAll()

if err != nil {
    fmt.Println(err)
    os.Exit(1)
}

lineCount := 1

for _, line := range data {

    //reading CSV

    //this returns 200 for all users found but 404 for not found
    user, resp, _ := jiraClient.User.Get(user) 

    if resp.StatusCode == 200 {
        fmt.Printf("Changed %s to %s\n", user.Name, data.user)
    } else {
        // have tried continue, return
    }
}

每次进入404响应时,程序都会失败并退出

我尝试了一下,没有运气。

我怎么能继续?

1 个答案:

答案 0 :(得分:2)

这个问题漏掉了细节,因为它赢得了如此多的选票。我以为我们正在处理Get method of UserService in go-jira.

Get方法返回错误:

func (s *UserService) Get(username string) (*User, *Response, error)

您正在省略错误检查并将其拉为空白标识符。请注意,如果使用非零值返回错误,则*Usernil

resp, err := s.client.Do(req, user)
if err != nil {
    return nil, resp, err
}

即使我错误地假设你正在使用的lib是一种Go方式来处理这种情况。正确的方法是检查错误值并执行您需要的操作,但不要等到程序面向nil指针取消引用。

  user, resp, err := jiraClient.User.Get()
  if err != nil {
      // Do something clever...
  }

错误是值

此外error是一个界面。所以错误可能包含一些有用的数据或者是具体类型的对象。

  

错误变量表示可以将自身描述为字符串的任何值。这是界面的声明:

type error interface {
    Error() string
}