Испытание медными трубами

19 октября 2022
Испытание медными трубами

Привет, гоферы! Сегодня взглянем на проблему обратной совместимости и кроссплатформенной разработки с помощью Go. Также расскажем про неоднозначный фреймворк Beego и корректный подход к завершению работы приложения.

Graceful Shutdown

О graceful shutdown и hard shutdown мы чаще всего слышим в контексте операционных систем. Первое можно назвать плавным завершением работы: все исполняемые приложения корректно закрываются и только после этого ОС завершает работу. Второе же можно назвать принудительным выключением: ОС прекращает работу вне зависимости от того, успели запущенные приложения завершиться штатно или нет.

Golang в этом похож на операционную систему. Здесь тоже есть необходимость корректно завершать работу запущенных задач до отключения приложения. Благо язык предоставляет инструменты, позволяющие отслеживать и обрабатывать сигналы завершения работы от ОС. В стандартной библиотеке есть пакет Context.

Начать стоит с туториала How To Use Contexts in Go от DigitalOcean. Из него вы узнаете, какие функции и методы можно использовать для реализации плавного завершения задач. context.Background создаёт новый контекст на каждый новый процесс. А метод Done() интерфейса Context вместе с фунцией context.WithCancel помогает корректно завершить работу контекста.

Чтобы взаимодействовать с сигналами завершения от ОС, потребуется пакет os/signal. Он также входит в стандартную библиотеку языка и реализует доступ к входящим сигналам ОС. Стоит помнить, что поведение в UNIX-подобных ОС будет отличаться от поведения в Windows или Plan 9.

Кроссплатфор­мен­ность с Fyne

В нашем дайджесте по Flutter мы не раз отмечали удобство кроссплатформенной разработки. Единая кодовая база для мобильного и десктопного приложения делают жизнь разработчика проще. Но не только Dart может этим похвастаться. У Golang припрятан козырь в рукаве — Fyne.

Это простая библиотека, позволяющая создавать программы с графическим интерфейсом на Go. Вместе с кросс-компилятором fyne-cross они позволяют собрать приложение почти под любую операционную систему и архитектуру. Обольщаться не стоит — там есть нюансы, которые не дают возможности работы сходу, «из коробки». Но и ничего сложного тоже нет, но без установленного докера адекватно не работает.

Вот так будет выглядеть Helloworld, написанный с помощью Fyne:

 

package main

import (
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/widget"
)

func main() {
	a := app.New()
	w := a.NewWindow("Hello")

	hello := widget.NewLabel("Hello Fyne!")
	w.SetContent(container.NewVBox(
		hello,
		widget.NewButton("Hi!", func() {
			hello.SetText("Welcome :)")
		}),
	))

	w.ShowAndRun()
} 

Этот пример можно запустить как обычно через go run main.go или в режиме симуляции мобильного устройства go run -tags mobile main.go.

Заинтересовали? Тогда обязательно прочитайте статью на Хабре Golang fyne Куда нажать? :-(, где автор подробно описывает свой опыт создания приложений на Fyne. Отдельно отметим, что кроме статьи автор составил краткий гайд по кросс-компиляции.

Go и обратная совместимость

Какое профессиональное сообщество без холивара? Вот и о тему обратной совместимости было сломано немало копий в попытках доказать жизнеспособность той или иной идеи.

Сохранение обратной совместимости — один из приоритетов индустрии, ведь это позволяет сохранить функционирование существующих систем. Людям в этом случае не нужно переучиваться или серьезно менять подход к привычной деятельности.

С другой точки зрения, сохранение обратной совместимости предполагает сдерживание развития и требует немалых ресурсов. Поддержка старых архитектур и протоколов ставит массу ограничений и часто является недостижимым препятствием на пути прогресса.

Развитие языка за последний год показало существенные преобразования в плане переделки архитектуры. Теперь в языке есть дженерики, появился фаззинг и в планах внедрение PGO (Profile-guided optimization). В сообществе закономерно начались обсуждения и таких важных вещей, как обратная совместимость.

Часть мейнтейнеров Golang указывают, что их цель — достижение полной обратной совместимости с первой версией языка. Это означает большую стабильность для конечных пользователей и задекларировано в документации. Исключения — исправления ошибок и ситуации с нарушением безопасности.

Есть и другая, альтернативная точка зрения. Мы видим немало примеров, когда выбор, сделанный в пользу прогресса, и отказ от обратной совместимости позволил добиться хороших результатов. Так Python 3 обзавёлся массой новых функций, код стало удобнее читать и воспринимать. Судя по рейтингам, языку это пошло на пользу.

Ждут ли нас глобальные изменения в Golang — покажет время. А пока можно спокойно обдумать всё вышесказанное, а возможно и поделиться своим мнением с коммьюнити.

Фреймворк Beego

В нашем дайджесте мы всегда стараемся рассказывать о самых разных инструментах разработки, даже о неоднозначных. Например, привычную для многих MVC-архитектуру попытались запихнуть в Go. Результатом стали такие фреймворки, как Revel и Beego. О последнем и расскажем чуть подробнее.

Tornado, Sinatra и Flask — именно они стали источником вдохновения для автора фреймворка. С помощью Beego можно создавать RESTful API, веб-приложения и серверные службы. Используется принцип «battery included» в отличие от того же Gingonic, то есть в фреймворке есть все необходимые инструменты.

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

Итого — можно писать full-stack приложения на Go, используя MVC-архитектуру. Но надо ли?

Подкасты

Немного IT

Видеоподкаст про Go снимают и развивают двое наших коллег из Evrone. Они обсуждают его преимущества и недостатки, сравнивают с другими языками.

Выпуски длятся 50-70 минут, а значит можно совместить какие-нибудь скучные занятия с обучением. Включайте шумоподавление на наушниках, чтобы не слышать пылесос, и погружайтесь в нюансы Go! Ну а если вам есть что сказать — добро пожаловать в комментарии!

Митапы

Онлайн

Осенний Go Meetup

19 октября 2022

Рады сообщить, что уже сегодня вечером состоится Go Meetup. Нас ждут интереснейшие доклады спикеров:

  • Антон Губарев (Авито) — «Реализация ролевой системы доступа с помощью Open Policy Agent».
  • Николай Тузов (Lamoda) — «Внутреннее устройство каналов в Go».
  • Андрей Беренда (Ozon Fintech) — «Ошибки, которые нельзя обработать в Golang».

Ещё не поздно зарегистрироваться и принять участие в мероприятии.

Регистрация

 

Вакансии

Удаленка / Офис

Evrone 

Мы открыты для новых Go-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах и выступления на конференциях, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.

Подробнее

Подписаться
на Digest →
Важные новости и мероприятия без спама
Технологии которыми вы владеете и которые вам интересны
Ваш адрес электронной почты в безопасности - вот наша политика конфиденциальности.