#go
#Вперед
Вопрос:
У меня есть:
type User struct {
UID int `json:"id"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Sex int `json:"sex"`
Nickname string `json:"nickname"`
ScreenName string `json:"screen_name"`
BDate string `json:"bdate"`
}
код:
var userList []*User
json.Unmarshal(resp.Response, amp;userList)
ответ сервера может быть:
[{"id":1,"first_name":"name","last_name":"last","sex":2,"nickname":"","screen_name":"screen","bdate":"1.1.1"}]
или
[{"id":1,"first_name":"name","sex":2,"nickname":"","screen_name":"screen"}]
моя проблема при вызове несуществующего КЛЮЧА ошибка во время выполнения « userList[0].LastName
«:
error: index out of range
в первом случае сервер вернул:
"last_name":"last" and "bdate":"1.1.1"
во втором нет
Когда пользователя нет, сервер возвращается.
[{"error_code": 0, "error_msg": "Invalid user id"}]
ответ:
if len(userList) > 0 {
c.String(http.StatusOK, "People name: %s", userList[0].FirstName)
} else {
c.String(http.StatusOK, "No People: %s", login)
}
Спасибо Magestro
Комментарии:
1. вы уверены, что хотите, чтобы указатель был там? ИМО, вы должны написать
var userList []User
2. Информация, представленная в вопросе, противоречива. Все примеры документов JSON разархивированы до фрагмента с длиной> 0 (см. play.golang.org/p/N34S0opAQPp ), но пользователь указан только в первых двух.
3. Проверка ошибок в скрипте перед обработчиком len (UserList) if. Ошибка != nil { возвращает nil, обработчик. Ошибка }
Ответ №1:
error: index out of range
означает, что userList
не имеет значения с индексом [0]
, а не с пустым LastName
В вашем примере все работает нормально: https://play.golang.org/p/WHIqgB52w_I
Вы уверены, что сервер возвращает допустимую строку и что эта строка существует в resp.Response
?
Попробуйте распечатать resp.Response
и найдите ошибку в другом месте
Комментарии:
1. В этом случае сервер возвращает
object
, а не anarray
. Таким образом, этот ответ не может быть преобразован в тип среза. У вас есть как минимум 2 решения: 1) Создайте пользовательскую « введите UsersResponse struct { Error struct { Cose int Msg string RequestParams map[string]string } Users []*User } ` И создайте пользовательские функции unmarshall для этого типа 2) Проверьте ошибку следующим образом: play.golang.org/p/a7sUT5T_EOn