86просмотров
4 октября 2024 г.
Score: 95
Сделал парвые два проекта на Golang Первый это grep на CodeCrafters, который был бесплатным там в сентябре. Прошёл только основные части, без бэкреференсов. Продолжу хвалить формат CodeCrafter sкогда тебе дают большую задачу, декомпозируют её на итерации и по одной выдают. Тут и поиск по документации, и рефакторинг между итерациями, и чуть более глубокое понимание того, как под капотом работают некоторые базовые штуки вроде регулярок в этом проекте. Второй, это переписывание небольшой самописной тулзы с Nim на Go. Функциональность в ней небольшая: прочитать конфиг в формате .toml и вызвать на основании конфига несколько HTTP апишек. Помимо учебного в переносе был и практический смысл: код на Go компилируется на самодостаточный бинарник, чего Nim из коробки не умеет, поэтому вместе с версией на Nim приходилось с собой тащить пару dll, что не очень удобно. Вот несколько наблюдений и мыслей после такого рефакторинга: 1. Кода стало написано в 2 раза больше. В PR добавлено 468 строк, удалено 235. Это связано в основном с обработкой ошибок, которую Go настойчиво побуждает тебя делать, и вторым пунктом. 2. Достаточно многословный HTTP клиент в стандартной библиотеке. Это верно и для Nim, но в нём я использовал свою же обёртку для стандартного клиента. В Go я тоже сходу не нашёл ничего привлекающую мою питонячью душу и решил попробовать сделать всё со стандартным клиентом. 3. Скомпилированный бинарник получился почти в 10 раз больше (851 Kb против 8118 Kb). Если добавить к бинарнику Nim ещё dll, то разница сократится до ~x3. 4. Опять понравилось, как в Go реализована асинхронность. В Tour of Go знакомили в основном с каналами, в этот раз пришлось воспользоваться WaitGroup. Надо поглубже познакомиться с пакетом sync, наверняка там есть ещё что-то интересное. Далее хочу сделать ещё один проект. Хочется сделать какой-нибудь API. Наслышан, что в Go для этого достаточно мощные инструменты в стандартной библиотеке. Поглядим) #roadtogo