Hi I’m having a tough time with paginated API requests using http.get().
It seems Go panics but I can’t tell why.
“panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x40 pc=0x64cdc3]”
I do know that the first get request is made successfully. It seems to panic on looping.
Is there an easier way to do this?
Orders := OrdersResponse{}
var NextLink string
OrdersCall, _ := http.Get("https://" + APIKey + ":" + APIPass + "@example.myshopify.com/admin/api/2020-04/orders.json?attribution_app_id=123456&limit=250")
Paginate := 1
for Paginate == 1 {
// If we got a NextLink call it.
if strings.Contains(OrdersCall.Header["Link"][0], "next") {
OrdersCall, _ = http.Get(NextLink)
}
OrdResio, _ := ioutil.ReadAll(OrdersCall.Body)
OrdersCall.Body.Close()
OrdJSON := string(OrdResio)
OrdersResp := OrdersResponse{}
json.Unmarshal([]byte(OrdJSON), &OrdersResp)
Orders.Orders = append(Orders.Orders, OrdersResp.Orders...)
if strings.Contains(OrdersCall.Header["Link"][0], "next") {
i := strings.Index(OrdersCall.Header["Link"][0], ">")
NextLink = OrdersCall.Header["Link"][0][1:i]
} else {
Paginate = 0
break
}
}
fmt.Println(len(Orders.Orders))