Используйте Go для этих сценариев и помогите Go стать конкурентоспособным с JavaScript и Python

Go (также известный как Golang) — это статически типизированный и компилируемый язык программирования, который предлагает два основных преимущества: простоту и производительность. Большинство языков программирования не могут сбалансировать простоту и производительность из-за архитектурных ограничений и сложных спецификаций языка. Например, Python предлагает вам самый простой синтаксис языка, но он производит медленные программы из-за абстракции и интерпретации. Язык C предоставляет эффективные бинарные файлы для конкретных платформ, но не предоставляет удобную для человека среду разработки. Между тем, язык Go сохраняет как простоту, так и производительность благодаря минимальной спецификации языка и впечатляющим принципам разработки языка.

Golang подходит для всех случаев использования, где вам нужна как производительность, так и удобный для разработчиков синтаксис языка. Но в настоящее время многие разработчики выбирают Golang только для разработки облачных платформ и веб-разработки. Некоторые разработчики также склонны использовать Go для создания программ CLI. Например, официальный GitHub CLI написан на Go.

Языки программирования, несомненно, становятся более популярными, когда они охватывают большее количество сообществ разработчиков. Теперь Golang пытается охватить больше сообществ разработчиков с помощью впечатляющих инноваций с открытым исходным кодом. В этой статье я объясню несколько менее известных вариантов использования Golang. Попробуйте использовать Go для этих сценариев и сделайте Go более популярным и конкурентоспособным по сравнению с другими языками с самым высоким рейтингом.

Попробуйте мобильные приложения с Go

В настоящее время современные мобильные разработчики используют React Native или Flutter для создания кроссплатформенных мобильных приложений. Если вы выберете React Native — вы должны изучить React.js и веб-технологии (Flexbox, JavaScript и т. д.). С другой стороны, Flutter требует знания пользовательского интерфейса Dart и Material. Если вы работаете только с проектами на Go, вы можете попробовать проект Go mobile для создания кроссплатформенных мобильных приложений. Мобильный проект Go создает инструменты для разработки мобильных приложений с использованием Go.

Мобильный проект Go все еще является экспериментальным, и они еще не предоставляют поддержку разработчиков. Но кодовая база показывает активное развитие и многообещающее будущее. Мобильная команда Go пытается собрать все воедино, чтобы предложить кроссплатформенную среду разработки приложений на основе Go для сусликов (разработчиков Go).

Этот проект предлагает два различных способа использования Go для разработки мобильных приложений: написание приложения полностью с помощью Go и использование Go как части кодовых баз для конкретных платформ (Android Studio или на основе Xcode). Кроссплатформенный подход к разработке мобильных приложений Go использует привязки OpenGL ES через Cgo и некоторую экспериментальную абстракцию (жизненный цикл приложения, клавиатура, сенсорный ввод и звук) для платформенных SDK. Этот проект изменит правила игры, если команда разработчиков решит создать набор инструментов пользовательского интерфейса на мобильной платформе Go, поскольку он использует графическую библиотеку для конкретной платформы, в отличие от Flutter.

Прямо сейчас можно разрабатывать гибридные мобильные приложения на основе Go с использованием Go mobile и GopherJS, хотя проект является экспериментальным.

Запуск веб-браузеров Go On

Веб-браузеры изначально поддерживают JavaScript. Но теперь функция WebAssembly может выполнять код, написанный на любом языке программирования, в браузерах — через промежуточный язык, подобный сборке, независимый от браузера. Мы уже знаем, что можем скомпилировать Rust в WASM через wasm-pack и C/C++ в WASM через Emscripten. Мы также можем скомпилировать Golang в WASM через официальный компилятор Go или TinyGo. Более того, мы можем транспилировать Go to JavaScript через GopherJS и по-прежнему работать в браузерах.

Вы можете скомпилировать Go to WASM с помощью официального компилятора Go, как показано ниже.

GOOS=js GOARCH=wasm go build -o hello.wasm hello.go

Официальный компилятор Go обычно генерирует большие выходные данные даже для целей WASM. Я получил двухмегабайтный двоичный файл WASM для простой fmt.Println программы. Но вы можете уменьшить пакет WASM до килобайт, используя TinyGo.

Вы можете преобразовать следующий фрагмент Go в JavaScript через GopherJS. Транспилированная версия следующего кода Go показывает предупреждающее сообщение в веб-браузере. Вы можете попробовать GopherJS онлайн на игровой площадке GopherJS.

package main
import "syscall/js"
func main() {
    js.Global().Call("alert", "Hello Gophers!")
}

Сообщество GopherJS также создало привязки Go для популярных библиотек/фреймворков JavaScript, таких как React.js, Vue.js, Angular.js, Electron и т. д. Теперь с помощью Go можно создавать интерфейсы веб-приложений и программы обработки больших объемов данных для браузеров.

Go и Go+ (ранее qlang) для науки о данных

Язык программирования C имел минимальные возможности как язык программирования высокого уровня. Из-за этих минимальных возможностей большинство программистов даже рассматривают C как несколько низкоуровневый язык программирования. Позже C++ сделал язык C удобным для разработчиков со многими абстрактными функциями.

Подобно путешествию на C и C++, энтузиасты программирования на Go создали путешествие на Go и Go+. Несмотря на то, что Go+ создает впечатляющее расширение для Go, оно все еще не используется широко.

Go+ предлагает впечатляющие функции для обработки данных/науки о данных, такие как встроенная поддержка рациональных чисел, функции динамической типизации, понимание списка в стиле Python, оператор for-range и лямбда-выражения.

Go+ нацелен на обработку данных, науку о данных и научные варианты использования с синтаксисом Pythonic. Некоторые разработчики могут посчитать, что использование языка программирования со статической типизацией для науки о данных является антишаблоном. Но Go+, tfgo (привязки Tensorflow Go) и Gonum (библиотека Go, похожая на NumPy) открывают многообещающее будущее для науки о данных на базе Go.

Использование Go для автоматизации и DevOps

Программисты используют концепции DevOps для предоставления высококачественного и стабильного программного обеспечения с продуктивным рабочим процессом разработки.

Концепции DevOps мотивируют команды разработчиков программного обеспечения оставаться продуктивными за счет автоматизации. Следующая история объясняет принципы DevOps:



Инженеры и программисты DevOps часто используют Bash или Python для автоматизации. В настоящее время веб-разработчики склонны использовать JavaScript для автоматизации.

Теперь мы можем использовать Golang для автоматизации действий благодаря пакету script. Пакет скриптов предлагает вам цепочку функций-оболочек для стандартной библиотеки. Таким образом, вы можете использовать этот пакет для написания сценариев оболочки, подобных Bash, с помощью Go.

Например, мы можем перечислить все файлы в текущем каталоге с помощью следующего фрагмента кода.

package main
import "github.com/bitfield/script"
func main() {
  script.ListFiles(".").Stdout()
}

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

Перейти к программированию встроенных систем

Мы уже знаем, что официальный компилятор Go генерирует довольно тяжелые двоичные файлы. Это не создает никаких проблем для облачных вариантов использования, но двоичные файлы выше среднего размера проблематичны для небольших вычислительных устройств, таких как встроенные системы.

Проект TinyGo поддерживал компиляцию Go для этих небольших вычислительных устройств — с помощью реализации компилятора Go на основе LLVM. TinyGo компилирует Go to LLVM IR с некоторыми промежуточными оптимизациями, затем LLVM выдает ассемблерный код для целевого микроконтроллера.

Наконец, TinyGo предлагает необходимые инструменты для записи выходного двоичного объекта в микроконтроллер. LLVM реализует генерацию кода для многих микроконтроллеров, как показано в следующем примере.

TinyGo создает двоичные файлы размером в килобайт из исходных файлов Go. Он генерирует двоичные коды для 70 различных плат микроконтроллеров, включая BBC micro:bit и Arduino.

Между тем, проект Gobot обеспечивает уровень абстракции для разработки Интернета вещей (IoT) с помощью фреймворка, включающего батареи.

Создание гибридных настольных приложений с помощью Go

Гибридные настольные приложения заменяют родные настольные приложения. Даже крупные технологические корпорации склонны создавать гибридные настольные приложения вместо нативных из-за различных технических преимуществ. Например, популярные настольные приложения, такие как Skype, Teams, Visual Studio Code, Slack и Discord, используют Electron. Electron позволяет разработчикам писать операции на уровне операционной системы с помощью абстракции Node.js.

Но что, если вы хотите создавать гибридные настольные приложения с серверной частью Go? Проект Lorca позволяет писать десктопные приложения на Go и JavaScript. Кроме того, можно полностью писать приложения Lorca на Go, комбинируя GopherJS с Lorca. Lorca использует ваш уже установленный браузер Chromium в качестве веб-рендеринга и экспортирует функции Go в контекст браузера через протокол Chrome DevTools WebSocket.

Lorca не объединяет экземпляр Chromium в пакет приложений, поэтому приложения Lorca обычно не становятся раздутыми, как типичные приложения Electron. Более того, вы также можете вызывать бэкэнды Go из приложений Neutralinojs.

Заключение

Языкам программирования нужно время, чтобы засиять, как и любому другому программному проекту. Python более 30 лет, но он все еще пытается войти в экосистему мобильной разработки. JavaScript более 25 лет, но он все еще пытается настроить свою грамматику/встроенные модули, чтобы конкурировать с простотой Python.

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

Спасибо за прочтение.