Vladimir
https://github.com/SolidlSnake/easyvk-go/blob/master/easyvk/vk.go#L179-L183
Vladimir
Это ты так проверяешь наличие поля "error" в JSON ответе?
Konstantin
Это ты так проверяешь наличие поля "error" в JSON ответе?
пока да. т.к. json ошибки и ожидаемого ответа сильно разные, не уверен, что маршить дважды для проверки на ошибку выгодно
Vladimir
https://godoc.org/encoding/json#RawMessage
Vladimir
Vladimir
Только в Response держать не указатель на json.RawMessage, а само значение типа json.RawMessage.
Vladimir
Ну и код ответа проверять нужно.
Konstantin
Читаю пример по ссылке и слабо понимаю пока, как это работает %)
Илья
json сохранится as is, и ты можешь дальше анмаршалить, в зависимости от наличия Error
Vladimir
Частичная десериализация.
Dmitriy
О, круто, беру на заметку. Не знал.
Konstantin
json сохранится as is, и ты можешь дальше анмаршалить, в зависимости от наличия Error
не, суть я понял, не совсем понял как оно работает в коде. Тобишь на месте RawMessage сохраняется не обработанный json и его потом можно использовать как и массив byte?
Konstantin
именно так
но как это срабоатет, если json вообще может разный быть? то { "error": {...}}, то {"response":{}}
Илья
в примере, который показал Владимир, он Error объявил ссылкой на структуру, т.е. если ее не будет в ответе, там будет nil, а response останется as is, и его далее можно будет разбирать
Илья
если response отсутствует, там будет пустой слайс
Vladimir
Указатель.
Konstantin
Ух, ладно, буду вкуривать) Спасибо
Мерль
Caddy 0.10 Released (Score: 101+) Link: http://j.mp/2oRDInP
Konstantin
А объясните еще раз, почему error и rawmessage именно ссылкой обозначены?
Konstantin
RawMessage незачем.
Но у вас там именно так)
Vladimir
Да, но так делать смысла нет.
Konstantin
А то я с ссылками и указателями слаб, знаю, что надо использовать когда передаем в функцию что-то, что должно быть изменено глобально и все
Konstantin
Поэтому подобные места вопросы вызывают
Vladimir
Указатель нужен, чтобы получить nil в случае отсутствия поля error.
Mike
RawMessage незачем.
вообще-то есть зачем. ссылка 8 байт весит, а все сообщение может много, и каждый раз копирвать много в локальные переменные функции такая себе идея
Vladimir
С указателем: {0x1050a180 <nil>} Без указателя: {0x1050a180 {0 []}}
Konstantin
Тобишь в данном случае указатель для простоты проверки, можно и без него проверяя, что ошибка пустой вернулась
Dmitriy / დიმიტრი
Кто пишет на Go на продакшене или имеет какие-то серьезные проекты. Как у вас организована сборка проекта с нуля? Пользуетесь ли вы vendor директорией? Используете ли вы в своем проекте всегда последнюю версию библиотеки или зафиксированы на определенной версии? Обновляете ли вы со временем эту версию?
Slava
вендорим, зафиксирована версия, не обновляем версию
Dmitriy / დიმიტრი
Есть ли способы просто как в nodejs/python подтянуть по списку все нужные библиотеки с нужными версиями а потом собрать проект?
Slava
есть, бери любой вендор инструмент
Slava
но подтягивать при сборке - гиблое дело, лучше вендорить
Dmitriy / დიმიტრი
В vendor git'овские сабмодули или все обычно код просто копируют не разделяя на отдельные репозитории?
Slava
вендор библиотеки копируют код в твой репозиторий
Slava
и ты хранишь его у себя
Alexey
но подтягивать при сборке - гиблое дело, лучше вендорить
А для вендоринга чем лучше пользоваться? Glide? https://github.com/Masterminds/glide У меня просто возникали с ним проблемы при использовании редактора Atom с плагином для golang - go-plus, автоматом там тул, что запускал тесты не понимал, что либы лежат в vendor папке. В итоге так и не разобравшись пришлось пока то что хотел завендорить положить по дефолтному пути ~/go/src
Slava
ну это плагин у тебя кривой, а не глайд
Slava
пользуйся нормальными IDE, типа vim
Quet
vim.. IDE... смешно конечно)
Alexey
Вим слишком радикально пока :)
Dmitriy / დიმიტრი
Решил пока с vendor'ами не заморачиваться. Попробую сейчас всё организовать в качестве сабмодулей, что бы можно было просто рекурсивно клонировать весь проект и собирать. Мне кажется просто хранить у себя отдельную копию библиотеки вместо git-ссылки на специфичную версию/коммит не очень хорошо. Правда я пока не знаю умеет ли git делать сабмодуль с ссылкой на определенную версию/коммит.
Slava
хранить у себя версию - это очень хорошо
Slava
потому что люди любят удалять/переименовывать свои репозитории
Slava
и интернет имеет свойство ломаться
Dmitriy / დიმიტრი
¯\_(ツ)_/¯
Dmitriy / დიმიტრი
Поменяют аддрес библиотеки - поменяю аддреса в проекте. Конечно хранить именно копию надежнее, но мне как-то это не сильно нравится. Всеравно что я у себя бы node_modules в проектах на node.js сохранял.
Dmitriy / დიმიტრი
Не уверен, что npm-подобное хранилище было бы лучшем решением, но мне кажется оно было бы более надежным. Всё-таки ник на github'е действительно может поменять какой-нибудь тип от которого зависит куча проектов. Но я новичок, в Go всего месяц и скорее всего тот ещё невежда
Slava
у нас тут подкаст начался http://golangshow.com/online/
engelbart
Да, это древняя боль. Придумали костыли - вендеринг, юзайте его. Не особо помогает. и есть шанс что вы однажды влетите в чужой проект без вендоринга. Что делать, жизнь боль.
Slava
все нормальные люди хранят код у себя
Slava
всегда есть вероятность атомной войны
Aleksandr
все нормальные люди хранят код у себя
только в твоем мире. в остальном мире есть нормальные менеджеры зависимостей
Aleksandr
это видимо свойство низкоуровневых языков - все таскать с собой. в высокоуровневых все подкачивают через менеджеры.
Ivan
это видимо свойство низкоуровневых языков - все таскать с собой. в высокоуровневых все подкачивают через менеджеры.
Это свойство серьезных компаний vs стартапчиков на коленочке. В стартапчике, если отваливается github, проект перестает собираться и все идут курить. В серьезной компании падение github-а никто не замечает.
Anonymous
И проект не перестаёт собираться, тк копии исходников лежат на компутерах
Anonymous
Ребята, не знаю аглийского языка, поэтому имею трудности в поиске нужной информации. А вопрос такой: хочу написать приложение для Android на Go. Что максимально можно сделать на Go для Adroid, я имею ввиду можно ли написать интерфейс или все таки без Java не обойтись? Буду рад ссылкам на полезные источники.
Anonymous
Ну вопрос в другом. Это я и сам понимаю)
who
на самом деле интересно есть ли смысл ?
Ivan
это утрирование и подмена понятий.
конечно, https://habrahabr.ru/post/280039/
Aleksandr
конечно, https://habrahabr.ru/post/280039/
это и есть доказательство утрирования. один раз случилось, и ты предлагаешь все таскать с собой
Ivan
И проект не перестаёт собираться, тк копии исходников лежат на компутерах
clean && build и нету их. А вообще не кажется слишком рискованным надеятся на закешированные копии? 😃
Ivan
это и есть доказательство утрирования. один раз случилось, и ты предлагаешь все таскать с собой
Когда такое затрагивает твой проект и бизнес, тебе не важно, какая вероятность у этого события. "Все свое ношу с собой" и душе спокойнее, и надежнее.
Ivan
кароче, парни, вам тут говорят как делают сильные мира сего, а вы там сами у себя решайте как делать)
Konstantin
https://godoc.org/encoding/json#RawMessage
Спасибо за наводку) Помимо более элегантного способа проверки ошибки еще и избавился от вложенных структур, которые мазолили глаза)
Aleksandr
увы, сильные мира сего - это 1% от количества, и 99% от ресурса на инфраструктуру, со всеми вытекающими
Dmitriy / დიმიტრი
Т.е. если в одной из библиотек от которой зависит программа обнаруживается фатальный баг и её надо обновить, то просто заново все файлы копируешь теряя все преимущества git'a? Мне кажется такой способ породит больше багов чем падение github'a.
engelbart
какие такие преимущества
engelbart
каие преимущества git в аццких его субмодлулях век бы их не видать