这可能是一个菜鸟问题,但我已经用谷歌搜索了一段时间。
我在一个 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)
您正在省略错误检查并将其拉至空白标识符。请注意,如果错误返回非零值,则 *User
为 nil
。
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/