Andrey
не знаю как версию обновлять в mod.go, но вот в go.mod поменяй версию и сделай go mod tidy. у тебя там станет немного все иначе выглядеть, если ты на 17 версию переедешь
Anonymous
не знаю как версию обновлять в mod.go, но вот в go.mod поменяй версию и сделай go mod tidy. у тебя там станет немного все иначе выглядеть, если ты на 17 версию переедешь
я делал go mod tidy, потом go get -u, но они просто по сути скачали с ссылок импорта то, что уже есть в go.mod. Версия осталась прежней
Andrey
у тебя в файле go.mod какая версия написана?
Alexander
поменяй версию в go.mod
Anonymous
у тебя в файле go.mod какая версия написана?
1.16, мне нужна для парсера 1.17
Anonymous
поменяй версию в go.mod
просто изменить с 1.16 на 1.17?)
Andrey
да. и go mod tidy сделай
Alexander
ну да, поменяй в го мод
Anonymous
и ещё вопрос, у _test.go для парсера что мы будем проверять? Что нужно тестить по сути? У меня парсер собирает всё в json, и по сути это пока его конечный результат
Maks
а откуда парсер данные берет?
Anonymous
а откуда парсер данные берет?
с сайта через StartURLs в стринге.
Maks
Тебе нужно разделить логику и передавать в зависимости сервис(интерфейс) который получается данные с внешнего сервиса(или с внутреннего) в твоем случае с сайта
Maks
И в тесте передаешь этот мок этого интерфейса
Maks
который вернет тебе нужные данные
Maks
и типо для этих данных у тебя должен быть жсон твой
Alexander
ну ты же не можешь по сути адекватно тестить делая запросы к другим сайтам. начни с теста парсинга хтмлек, а потом уже можешь добавить к этому какой-нибудь виртуальный сервер хттп
Alexander
но опять же тестировать такое - слишком бесполезно может быть, потому что сотни вариаций в чем чужой сервер может косячить. и условий, которые уже от сети зависят и тд
Anonymous
json создаётся на выходе при ране проекта по сути, можно конечно через curl протестировать всё, или через докер, или через фейк сервер
Maks
Ну и тесты разные бывают. Юнит, интеграционное или еще какое то
Anonymous
и ещё если я использовал импорт клиента и сервера из другой библиотеки, то мне её можно как-то указывать в тест.го?
Anonymous
всё сделал) спасибо всем за советы
Tikhon
Ребят, пытаюсь вникнуть в чистую архитектуру - не понимаю одного момента: чистая архитектура подразумевает под собой независимость от внешних компонентов, например фреймворков. А как это реализовать на деле ? Например фрейморки fiber или gin. Роутеры этих фреймворков хотят получать хэндлеры с определённой сигнатурой. А это уже получается, что мои контроллеры внешне зависят от этой библиотеки
Tikhon
В общем вопрос заключается в следующем - где в чистой архитектуре я могу внешне зависеть от библиотек на которых основано приложение, а где не могу ?
Tikhon
Или контроллеры на "одном уровне" с фреймворком ?
Alexander
Видимо адаптеры наворачивать на аргументы, которые передают эти фреймворки
Alexander
Но это чушью кажется
Tikhon
Понял, окей
Patriot
как понять, билд молча проходит, ран молча проходит. но вебсервер не запущен. где искать проблему?
Alexander
ошибки обрабатываешь?
Alexander
или выбрасываешь?
Patriot
не обрабатываю
Alexander
ну а как ты узнать хочешь почему не сработало?) хотя бы с panic(err) начни
Andrey
Вообще, мне вот интересно, уже не первый человек приходит, кто забивает болт на ошибки, их пирсинг и обработку. Где учат так код писать, скажите плиз
Patriot
нигде. по туториалам
Patriot
еслиб учили, не спрашивал бы )
Alexander
я таких туториалов не видел
Andrey
Даже в книге по Го, есть отдельная глава, то ли "Обработка ошибка", то ли "Стратегия обработок ошибок", и там около 5 вариантов рассматривают
Alexander
ну мы ж книги читать не будем: мы побыстрее хотим, либо мы уже на другом языке полгода поработали
Patriot
ожидание - иде и компилятор на ошибку сругаются. реальность - тишина. писать ексепшены. ок. значит надо изучить их
Anonymous
а то есть
Alexander
дык это ошибка времени выполнения. откуда они знают, что ты запустишь когда-то в будущем, а у тебя порт занят другим процессом?
Anonymous
а то есть
тебе иде говорит, что будет возвращаться два значения и ты осознанно вместо err пишешь _
Anonymous
и думаешь, что тебе иде скажет что там за ошибка была?
Alexander
типа каждый раз перед компиляцией выбрасывать ворнинг: вот на этой строке может случиться такая-то фигня, еще такая-то, еще такая-то?
Alexander
а лучше вообще не компилироваться, тогда ошибок времени выполнения вообще не будет
Denis Pershin
И сразу мержил в мастер
Herman
100 это если еще мало)
Anonymous
ахвхстцшмьцщбцщмбцз
Anonymous
хватит этой пасты
Anonymous
я разрываюсь
Alexander
И сразу мержил в мастер
какой мастер? настоящие пацаны файлики копируют с флешки
Tikhon
Подскажите пожалуйста, я бы хотел через конструктор apiserver в поле app передать *fiber.App, но по указателю почему-то не получается
Tikhon
Tikhon
При передаче по указателю пишет что метода Use не существует
Tikhon
Нормально ли всё отработает, если я передам fiber.App в конструктор по значению, а не по указателю ?
Tikhon
Конечно, справа открыт интерфейс с этим методом
Tikhon
И далее я интерфейс в конструктор в качестве параметра передаю
Tikhon
Подразумевается что до вызова конструктора будет вызван fiber.New(), и далее результат вызова fiber.New() уже в конструктор передадим
Tikhon
А в каком именно месте ?
Tikhon
Это очень странно, но app у меня не хочет указателем становиться
Null
@golangtests
Null
Tikhon
Ладно, на stackoverflov спрошу, раз уж тут за ночь не ответили
Tikhon
Ибо в конструктор я 100% должен указатель передавать
Tikhon
О, нашёл
Tikhon
https://www.reddit.com/r/golang/comments/mess4w/cannot_access_interfaces_method_when_interface_is/
Andrey
@tikhonfedulov А ты знаешь, как выглядит interface{} под капотом? И сможешь ответить на вопрос, почему тебе в структурные методы приходит вроде как указатель, но ты все равно работаешь с ним без разименования?)
Tikhon
К сожалению нет
Tikhon
А как с этим теперь бороться ?
Tikhon
Я в интерфейсе WebFramework определил некий метод Group(), который возвращает неизвестный интерфейс
Tikhon
А как мне с этим интерфейсом дальше работать ?
Tikhon
А, можно попробовать его тоже описать
Andrey
Друг, ты идешь по пути страдания, боли, стрельбе себе по ногам и тому подобные вещам. Интерфейс это абстракция. И когда ты его возвращаешь, то компилятору не известно, есть у него метод POST или нет. Без понимание работы интерфейсов, приведении типов и тп вещей, ты будешь такие ошибки встречать повсеместно
Null
Как сгенерировать HTML с помощью шаблонов Golang https://uproger.com/kak-sgenerirovat-html-s-pomoshhyu-shablonov-golang/ @Golang_google
Tikhon
Ребят, подскажите пожалуйста, может я не понимаю. Чистая архитектура подразумевает под собой независимость от внешних библиотек, например фреймворка gin или fiber, но ведь для внедрения зависимости нам нужно отдельно для нее описывать интерфейс этой зависимости. Я не понимаю соответственно следующего: чтобы объект библиотеки удовлетворял интерфейсу - в интерфейсе нужно объявить методы, имена и сигнатуры которых будут совпадать с методами внедряемой библиотеки. Я не понимаю где тут независимость, при замене внешней библиотеки могут измениться имена методов и их сигнатуры, и соответственно придется переписывать интерфейс. Где тут независимость ?
Tikhon
Плюс например, если опять же взять в пример fiber или gin - у них есть контексты, и имена методов у этих контекстов различаются. Допустим мы передаём в обработчик неизвестный контекст *interface{}, но ведь потом внутри функции обработчика мы всё равно обращаемся к уникальным методам этого контекста
Tikhon
И при смене внешней библиотеки придется всё внутри обработчика переписывать