Очень тяжело писать что-то в первый раз, понял не с первого просмотра, но все же, у меня вышло повторить за вами. Огромное спасибо за такой прекрасный контент!
Отличный урок! Круто, что ты проговариваешь все мелочи, даже такие вещи как повторяющийся string у параметров. Такие мелочи помогают задумываться в будущем самому над своими действиями, стараться анализировать ситуации, а не просто делать всегда так как позволяет язык, беря это за безусловную константу. Хотя, конечно, с именованием некоторых методов мне сложно себя перебороть и самому проще воспринимается, когда есть get в префиксе названия метода, который что-то получает и возвращает. Потому что в идеальных условиях, когда всё по полочкам, наверное, понятно сразу что делает метод, но когда кода бывает много, он делает много разношёрстных вещей находясь рядом (в реальных проектах на моей практике так чаще всего бывает), то мне всегда проще вылавливать такие сразу понятные и близкие мозгоуху вещи, как get, update, delete, enrich и т.п. - нет этого диссонанса, когда я на пол минуты задумываюсь а что же ты чёрт побери такое)) Но, возможно, это только моя проблема)) Но я пока погетаю ещё, может быть потом когда-нибудь дорасту и полюблю) P.S. Именование функции преобразования числа в строку у меня изначально не вызывало вопросов, только я думал что I - это integer to a - просто первая буква алфавита, мол int в строку =) Было интересно услышать про истинную сущность "a" )
Не претендую на истину: Оптимизация через defer здесь не нужна. Усложняешь читаемость и дебаг. Вот увидел ты в логах текст обернутой ошибки, нашел свой defer и ищешь где же там выстрелило. А без лишнего накручивания сразу бы нашел место. И текст оборачиваемый надо адреснее делать, чтоб сразу понять где трабл. В твоем случае это будет: fmt.Errorf("updates doRequest fail: %w", err)
спасибо за материал. небольшая оптимизация для метода doRequest - результат io.ReadAll передавать сразу в data, так как уже имеется именованное возвращаемое значение
Совсем недавно начал изучать Golang, это первый язык, по твоим урокам хочу научиться писать ботов) с таким подробным проговариванием действий я начинаю понимать что к чему, а это огромный прорыв для новичка, спасибо за твой труд. P.S. прикрути донаты себе на канал, кто-то наверняка захочет поблагодарить
Да, с defer возвращение ошибок чуть, оптимизировано, но является ли это чистым кодом? Выглядит как уже оверхед, те дублирования было не так много, чтобы жертвовать простотой и читабельностью.
Вопрос. Метод doRequest у нас выполняет несколько действий: 1. формируем запрос для отправки, 2. отправляем запрос, 3. читаем ответ. Почему мы не разбиваем метод на несколько методов для того, чтобы обеспечить условие чистого кода "каждая функция выполняет что-то одно"?
Хочу узнать по поводу конструктора func New для структуры Client. Я много раз в разных видео по Go видел, что такие конструкторы возвращают именно указатель, а почему в данном случае это не указатель ?
забавно, что от подобного подхода к программированию лично я хотел всегда уйти. просто я заметил, что изначально готовится "инфра для запуска тн бизнес-логики", а потом уже сама бизнес-логика. кажется, что с конкретикой можно поработать после реализации
Спасибо за урок! Остался вопрос: почему query.Encode() делается уже после http.NewRequest(), а не при инициализации структуры u? Попробовал добавить поле RawQuery: queryEncode(), все работает так же Спасибо!
В случае таких вопросов лучше сразу писать тайминг, т.к. мне нужно найти момент, глянуть и вспомнить. Но если я правильно помню, то в том случае без разницы, в каком порядке выполнять эти действия.
если второй урок был понятен , то тут уже нагромождение такое что в голове всё запуталось , что откуда и куда. Для новичка который не имела опыта такое не прожевать, а хочется ) . Жаль что нету обнесения на подобных примерах про структуры json слайсы.
Не совсем понял почему нельзя сократить и не писать одинаковые типы аргументов, мы же не общий клиент пишем, а клиент именно для телеграмма. Как по мне это просто вопрос стиля написания кода, когда пишешь тип к каждому аргументу вроде как нагляднее, для начинающего конечно так проще
Библиотека не подтягивается в telegram.go, в чем может быть проблема? Та же IDE, но она не подсказывает. Папка лежит в root/lib/e, вручную тоже нет. Что я упускаю? Подскажи пожалуйста