这可能是一个菜鸟问题,但我一直在谷歌搜索。
我在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响应时,程序都会失败并退出
我尝试了一下,没有运气。
我怎么能继续?
答案 0 :(得分:2)
这个问题漏掉了细节,因为它赢得了如此多的选票。我以为我们正在处理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
}
即使我错误地假设你正在使用的lib是一种Go方式来处理这种情况。正确的方法是检查错误值并执行您需要的操作,但不要等到程序面向nil指针取消引用。
user, resp, err := jiraClient.User.Get()
if err != nil {
// Do something clever...
}
此外error
是一个界面。所以错误可能包含一些有用的数据或者是具体类型的对象。
错误变量表示可以将自身描述为字符串的任何值。这是界面的声明:
type error interface {
Error() string
}