Найти в Дзене

Почему мой первый микросервис на Go получился случайно (и почему я до сих пор не уверен, что это вообще микросервис)

Вчера вечером сидел дома, попивал чай, и вдруг в голову пришла странная мысль: "А не попробовать ли новый язык? Go же вроде для микросервисов создан". В итоге я понятия не имел, что через пару часов буду гуглить, как в Go подключиться к MySQL, и что эта история заведет меня гораздо дальше, чем я планировал. Все началось с того, что мне захотелось протестировать себя. Ведь постоянно работаю с Python и JavaScript, а про Go только слышал, что он "быстрый" и "простой". Ну и в голову пришла гениальная идея — сделать парсер вакансий. Типа, применить новый стек для реальной задачи. Но поскольку я все-таки вайб кодер (и не стыжусь этого!), решил не писать код с нуля, а воспользоваться помощью нейросети. И вот тут начинается самое интересное. Я включил ChatGPT, дал ему задачу: "Создай парсер вакансий на Go с сохранением в MySQL", и стал ждать, что он мне предложит. Сначала показалось, что он сгенерировал какую-то абракадабру. Синтаксис Go — это вообще отдельная вселенная. Вместо привычных фигу

Вчера вечером сидел дома, попивал чай, и вдруг в голову пришла странная мысль: "А не попробовать ли новый язык? Go же вроде для микросервисов создан". В итоге я понятия не имел, что через пару часов буду гуглить, как в Go подключиться к MySQL, и что эта история заведет меня гораздо дальше, чем я планировал.

Все началось с того, что мне захотелось протестировать себя. Ведь постоянно работаю с Python и JavaScript, а про Go только слышал, что он "быстрый" и "простой". Ну и в голову пришла гениальная идея — сделать парсер вакансий. Типа, применить новый стек для реальной задачи. Но поскольку я все-таки вайб кодер (и не стыжусь этого!), решил не писать код с нуля, а воспользоваться помощью нейросети.

И вот тут начинается самое интересное. Я включил ChatGPT, дал ему задачу: "Создай парсер вакансий на Go с сохранением в MySQL", и стал ждать, что он мне предложит. Сначала показалось, что он сгенерировал какую-то абракадабру. Синтаксис Go — это вообще отдельная вселенная. Вместо привычных фигурных скобок в Python тут точки с запятой пропали, var какие-то, := вместо обычного =, и вообще все выглядело как будто я попал в параллельную вселенную программирования.

Но постепенно начало доходить. Вот эта конструкция `package main` — это же как `if __name__ == "__main__":` в Python, только короче. Функция `main()` поняла себя сама. Ну и ладно, если незнакомо, зато логика в целом знакомая: подключиться к базе, отправить HTTP-запрос, распарсить HTML, записать в базу.

Самое забавное, что в итоге все заработало. Нейросеть не только предложила код, но и помогла разобраться с драйвером MySQL (`github.com/go-sql-driver/mysql`), показала, как использовать `database/sql`, и даже структуру данных предложила нормальную. Я же, получается, просто вайб кодер, который смог реализовать микросервис? Хотя я до сих пор не уверен, что это вообще микросервис.

С одной стороны, Go действительно подходит для таких задач. Код компактный, ресурсов потребляет мало, и явно заточен под сетевое программирование. HTTP-сервер запускается в три строчки, JSON парсить просто, база подключается без танцев с бубном. Вот это, наверное, и есть та "простота", о которой все говорят.

Но с другой стороны, я все время ловил себя на мысли: "А что если нужно что-то посложнее?" Вот этот странный интерфейс `io.Reader` в Go — для меня это пока что-то мистическое. Или когда я пытался разобраться с горутинами и каналами — понял, что вообще не понимаю асинхронности в Go. Синтаксис хотя и кажется простым на первый взгляд, но скрывает под собой совершенно другую философию программирования.

Особенно меня смущает, что я сделал все с помощью нейросети. Получается, я не столько изучал Go, сколько пользовался готовым решением? Правильно ли считать это за освоение нового стека? Или это просто современный способ делать что-то, не особо вникая в суть?

Вот сижу сейчас и думаю: а ведь получился у меня вполне рабочий парсер. Он вакансии парсит, в базу складывает, API отдает. Все работает стабильно, даже логика обработки ошибок есть. Но освоил ли я при этом Go? Мне кажется, что я скорее научился правильно задавать вопросы нейросети, а не программировать на Go.

С одной стороны, это повод для гордости — в XXI веке научился создавать микросервисы с помощью AI. С другой стороны, возникает вопрос: а что я умею без AI? И это пугает, если честно.

Возможно, Go мне понравился тем, что он заставил меня мыслить по-другому. В Python я привык к множеству способов решения одной задачи, а в Go большинство вещей делаются как-то предсказуемо и структурированно. Есть четкие гайдлайны, и если им следовать, код получается читаемым. Это, наверное, плюс для командной разработки.

Но вот эту предсказуемость я иногда воспринимаю как ограничение. Когда в Python я могу одной строчкой сделать что-то изящное, в Go приходится писать больше кода для той же функциональности. И я не уверен, что это всегда оправдано.

В итоге, после пары часов работы с Go, у меня противоречивые впечатления. Синтаксис все еще кажется незнакомым и местами странным. Но логика понятна, и в целом даже интересно. Думаю, для легких задач типа этого парсера Go подойдет — быстрый, надежный, неприхотливый. Но что-то более сложное, где нужна глубокая проработка архитектуры или нестандартные подходы, пока что кажется мне за пределами моих текущих возможностей.

Может быть, это и правильно. Зачем сразу браться за что-то сложное, если можно постепенно осваивать новое? Хотя, если честно, втайне я надеюсь, что через месяц перечитаю эту запись и подумаю: "Что за чушь я тогда писал? Конечно, Go — это будущее!"

А может, и не буду. Пока что не знаю.

P.S. А у вас бывало такое, что изучаете новую технологию с помощью AI, а потом сомневаетесь, чему на самом деле научились? Или это только у меня такая странная проблема?