Как напрямую передать Podio AuthToken клиенту podio-go

Я разработчик Ruby on Rails и теперь решаюсь на Go для выполнения некоторых вызовов API podio.com. До сих пор все шло гладко, но я столкнулся с небольшой и глупой проблемой, на которую я не нашел ответа в мощном stackoverflow (вероятно, потому, что я не знаю, что искать).

Немного контекста: наше приложение rails уже обрабатывает весь поток сервера podio oAuth, у нас есть вся необходимая информация о клиенте (auth_token, refresh_token, ...), и нам не нужно запрашивать эту информацию снова.

Вместо того, чтобы делать

 podio.AuthWithAuthCode(clientId, clientSecret, authCode, redirectUri)

Я хочу напрямую создать такой клиентский объект

// json data coming from rails
json_auth_token := "{\"access_token\":\"...\",\"refresh_token\":\"...\",\"token_type\":\"\",\"expires_in\":28800,\"transfer_token\":\"\"}"

// creating a AuthToken object
authToken := podio.AuthToken{}
json.Unmarshal([]byte(json_auth_token), &authToken)

// so far so good, but when doing
client := podio.NewClient(authToken)

Я получаю ошибку

cannot use authToken (type podio.AuthToken) as type *podio.AuthToken in argument to podio.NewClient

Кто-нибудь может мне с этим помочь? Это не обязательно связано с Podio. Больше связанных


person pjmuller    schedule 01.07.2016    source источник


Ответы (1)


В настоящее время тип переменной authToken podio.AuthToken, т.е. не указатель, а просто структура. Функция podio.NewClient ожидает аргумент типа *podio.AuthToken (указатель на podio.AuthToken), поэтому вы получаете ошибку компилятора. Самый простой способ исправить это - просто проявить уважение authToken вот так:

client := podio.NewClient(&authToken)

В качестве альтернативы вы можете изменить тип authToken на *podio.AuthToken:

authToken := &podio.AuthToken{}
json.Unmarshal([]byte(json_auth_token), authToken)
client := podio.NewClient(authToken)

Слегка несвязанный (и, возможно, вы опустили это для краткости), но вы, вероятно, захотите проверить ошибку, возвращаемую из json.Unmarshal:

err := json.Unmarshal([]byte(json_auth_token), authToken)
if err != nil {
  // handle error
}
person cuvius    schedule 01.07.2016
comment
Работает как шарм! амперсанд чуть не сводил меня с ума. Спасибо за супербыстрый ответ, Андреас. Ценить это! - person pjmuller; 01.07.2016
comment
И действительно, я отлавливаю ошибку при парсинге json. Но не публиковал его, чтобы упростить пример кода. - person pjmuller; 01.07.2016