Какие существуют библиотеки для создания графического пользовательского интерфейса (GUI) в Go?

Ответ

В стандартной библиотеке Go нет встроенных средств для создания полноценного графического интерфейса (GUI). Однако существует несколько популярных сторонних библиотек для этих целей:

  • Fyne — кроссплатформенная библиотека, ориентированная на простоту и быстроту разработки.
  • Gio — более низкоуровневая и производительная библиотека для создания кастомных интерфейсов.
  • Wails — современный подход, позволяющий использовать веб-технологии (HTML/CSS/JS) для фронтенда десктопного приложения, а Go — для бэкенда.
  • Walk — библиотека для создания нативных GUI-приложений исключительно под Windows.

Пример с Fyne:

package main

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

func main() {
    a := app.New()
    w := a.NewWindow("Hello")
    w.SetContent(widget.NewLabel("Hello, Fyne!"))
    w.ShowAndRun()
}

Для создания веб-интерфейсов Go предоставляет пакет html/template для серверного рендеринга, а также отлично сочетается с фреймворками (например, Gin, Echo) и любым современным фронтендом на JavaScript/TypeScript (React, Vue, Svelte).

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

Ответ 18+ 🔞

А, ну вот, опять этот вечный вопрос про GUI на Go, блядь! Как будто специально подгадывают, чтобы спросить именно про то, чего в коробке-то и нету!

Смотри, суть в чём: стандартная библиотека Go — это такой суровый, блядь, инструмент для взрослых дядек. Там всё про сети, про горутины, про эффективность, а про кнопочки, окошки и менюшки — нихуя. Ну, то есть вообще. Ни одной родной кнопки, чтобы нажать и сказать «ой, как мило!». Забудь.

Но народ-то не лыком шит, блядь! Нашли как выкрутиться. Смотри, какие варианты есть, выбирай на свой вкус и цвет:

  • Fyne — это типа для тех, кто хочет быстро и без боли. Кроссплатформенно, вроде как просто. Накидал виджетов — и готово, работает везде. Но иногда чувствуется, что оно не совсем… нативное, понимаешь? Как будто в пальто на пляж пришёл.
  • Gio — а вот это уже для перфекционистов и мазохистов, блядь. Низкоуровневое, производительное. Хочешь — нарисуй интерфейс одной линией, хочешь — целую анимацию с тенями. Но готовься попотеть, ёпта. Это не конструктор.
  • Wails — современная, хитрая жопа. Тут идея простая: фронтенд — это твой любимый HTML/CSS/JS (React, Vue, что угодно), а в бэкенде сидит наш могучий Go и делает всю грязную работу. Красиво и модно.
  • Walk — ну, это для тех, кто фанатеет исключительно под Windows и хочет, чтобы приложение выглядело как родное, из панели управления. Для остальных ОС — нихуя.

Вот, смотри, как на Fyne это самое «Hello World» выглядит, проще некуда:

package main

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

func main() {
    a := app.New()
    w := a.NewWindow("Hello")
    w.SetContent(widget.NewLabel("Hello, Fyne!"))
    w.ShowAndRun()
}

Видишь? Никакой магии. Создали аппликуху, окно, тыкнули в него текстовую метку и поехали.

А если про веб — так тут Go вообще король, блядь! Встроенный html/template есть для серверного рендеринга, а если хочешь SPA — бери любой фреймворк (Gin, Echo — просто песня, блядь) и корми JSON твоему React/Vue на фронте. Разделение труда — красота!

Но вот честно, чувак: Go создавался не для того, чтобы окошки рисовать. Его стихия — это сервера, которые не падают, CLI-утилиты, которые рвут жопу скоростью, и всякие микросервисы. Сидишь себе в терминале, и хорошо. Захочешь красивых интерфейсов — либо на веб уходи, либо другой язык бери. А Go — он про другое. Про надёжность, про скорость, про простоту. Так-то вот, блядь.