для работы с одним достаточно кривым API. Там user_id везде идёт как int, а в одном из эндпоинтов - как число в кавычках (строка). Когда мой метод SDK возвращает декодированную структуру, то что должно быть типом этого user_id? json.Number или же нужно делать промежуточную структуру, а потом конвертить в другую структуру, где user_id делать интом?
Если везде инт, то возвращай везде инт, а в этом одном месте уже сам крутанись как-нибудь...
Ага, понял, спасибо
Конвертните строку и присвойте встроенному А.Id и верните его Где А - ваш тип где айди это инт и который используется повсеместно в остальных местах общения с апи https://play.golang.org/p/TYQ0LNIDHSw
да проще по моему сразу в структуре тип стринг поставить и через strconv в int бахнуть
Я предлагаю тоже самое но для этого одного уникального роута апи который возвращает строку вместо числа. При этом основной тип с которым будет взаимодействовать пользователь СДК остаётся один и тот же, в данном случае это структура А
Спасибо. Не знал о таком лайфхаке
Я правда не понял, в чём смысл, если честно. Там же тип всё равно string. Да, можно обращаться как b.A.Id, но это ж неудобно... https://play.golang.org/p/Mz7xXCOzV1r
VK API?
Нет
https://play.golang.org/p/bHad94nEdi0 json.Number подойдет
вы сказали что во всех случаях там int и в одном строка. Для конкретного случая где строка можно сделать вот такой воркэраунд. Парсить как строку, потом эту строку привести к int и присвоить во внутреннюю структуру в b.A.Id и из метода юзеру вашего СДК вернуть только b.A
Так вот и вопрос: а насколько правильно, если мой SDK клиент будет такой тип возвращать? Или правильно конвертацию делать?
вообще такое себе
Ну там у меня не одно поле надо возвращать, а целую структуру. Получается, надо промежуточную структуру создать, а возвращать другую (где в этом поле int будет)?
так вы и вернете всю структуру. В B у вас только одно поле Id которое затеняет Id во встроенной структуре A, я же специально докинул внутрь А поле Some чтобы показать что плоский json нормально распарсится в поля внутренней структуры если она встроена и только Id будет затенен
Я понимаю, но ведь пользователи библиотеки, ожидая получить этот id, будут писать b.Id - и будут получать string'овый Id
я спросил, потому что у ВК, как и у любой поделки на PHP есть проблемы с тем что путаются типы int/float/bool/string и там тоже есть пляски с анмаршалом, чтоб получать нормальные типы на выходе https://sourcegraph.com/search?q=context:global+repo:%5Egithub%5C.com/SevereCloud/vksdk%24+UnmarshalJSON&patternType=literal
он не будет знать ваще о типе B потому что вы вернете ему А, В только как служебный используйте
Да, я знаю. Это не VK, но там, возможно, тоже php. Ну или NodeJS - фиг знает
вы же можете сделать тип В не экспортируемым чтобы пользователь СДК ваще его не видел
Сообразил. Спасибо, это прямо то, что нужно
Всегда пожалуйста. Вот еще раз с коментами и нормальными именами типов. https://play.golang.org/p/CY_xBGfzSTF
Норм вообще, мне чего-то в голову этот способ не пришёл
Ты сделай просто, тот сломанный Дженсон пройди по нему как по строке и удали ненужные ковычки, ничего не конвертируя и не создавая паразитных структур.
Я так кое-где делал (кстати, да, потребуются регулярки) - и это такое себе :)
Ты сделай без регулярок, просто посимвольно пройди. Я предположу что анмаршал может принимать поток символов, а ты в нем просто отфильтруй эти ковычки. Я не знаю в Го можно или нет, но ты прямо по месту замени кавычки на пробелы, точно самое эффективное будет.
И пусть мне кто-то потом скажет, что в Go нормальная работа с json, ага
А причём тут go, если у вас во входных данных черти что
В той же NodeJS это без проблем разруливается ж
в NodeJS динамическая типизация
Сильно сказано Волна критики нахлынет на тебя...
Ну когда предлагают в строке json убрать кавычки, чтобы строку превратить в число, причём не регуляркой даже, а посимвольно - что я могу на это ответить-то?))
извините, а Go здесь при чем?
Вам помимо этого решения предложили ещё как минимум два, причём оба нормальные, ничего трансформировать не надо
Дмитрий, мне кажется у тебя не хватает цели в жизни. Судя по тому сколько мы мусолим эту тему. Сделай самым простым и надёжным способом, который поймет любой, кто посмотрит на твой код. Сделай тест и ещё напиши автору этого эндпоинта, но это уже потеря времени. Давай, соберись!! :)
Так а кто спорит-то? Я высказался лишь про один из вариантов
вы обобщили это на весь го
Писал - бесполезно
"Дмитрий, мне кажется у тебя не хватает цели в жизни" - не думаю, что есть смысл переходить на личности
Я исключительно из дружеских побуждений. Никого не хочу обидеть.
Обсуждают сегодня