go - 404响应后继续循环

标签 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 响应时,程序都会失败并退出

我已经试过了,但没有成功。

我怎样才能让它继续?

最佳答案

这个问题泄露了细节,因为它赢得了太多的反对票。我假设我们正在处理一个 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
}

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

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

错误是值(value)

此外,error 是一个接口(interface)。所以错误可能包含一些有用的数据或者是一个具体类型的对象。

An error variable represents any value that can describe itself as a string. Here is the interface's declaration:

type error interface {
    Error() string
}

关于go - 404响应后继续循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842726/

相关文章:

string - 类型 "string"和 "func() string"之间有什么区别?

html - 你如何在 Go 中转义原始 HTML?

go - 如何使用Golang快速向Postgres添加很多行

http - 在go中检测失败的http连接

go - 如何确认来自 Go 客户端的 gRPC 流量是 TLS 加密的

go - 如何禁用常量的隐式类型转换?

performance - 在 Go 中以 GMP 风格的性能处理大量数据

string - 如何使用 Go 将格式化字符串打印到标准输出中的同一行?

go - 这个文字的类型是什么?

mysql - Golang 连接到 docker 连接到我的 sql docker getsockopt : connection refused