Все та же ошибка:
runtime error: index out of range
if item.online == "" {
item.online = "не указано"
}
Проблема в том, что в структуре он есть, но при ответе api может его вообще не отдать - то есть item.online в ответе может не существовать, как структуры
Еще проще:
Может отдать так:
[ online: "info", status: "info"]
А может так:
[ status: "info"]
type User struct {
ID int `json:"id"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Status string `json:"status"`
LastOnline *LastSeen `json:"last_seen"`
}
var userList []*User
json.Unmarshal(resp.Response, &userList)
c.String(http.StatusOK, userList[0].LastName)
Больше половины структуры может отсутствовать в ответе именно отсутствовать, а не возвращаться пустыми.
Это помогло определить существует ли пользователь, т.к При существовании, всегда есть одно из полей которое заполнено, а следовательно пользователь существует к примеру его ID.
Но проблема состоит в том, что я не могу понять, как определить и обработать, нужный мне KEY в ответе если его нет.
И следовательно паника возникает из-за несуществующего KEY в ответе.
var userList []*User
json.Unmarshal(resp.Response, &userList)
c.String(http.StatusOK, userList[0].LastName)
Как указал выше Andrey Tsvetkov, проверяйте срез на наличие в нем элементов. Если он пуст, то обращение по индексу как раз и приведет к Index out of range.
Больше половины структуры может отсутствовать в ответе именно отсутствовать, а не возвращаться пустыми.
От этого подобной ошибки не будет. Смотрите мой ответ ниже.
Если поля структуры не экспортируемые, а этот кусок кода говорит, что это именно так, то все поля структуры будут иметь пустые значения.
Index out of range говорит о том, что settingList пуст.