EnglishРусский Map

Gova

title
Gova
type
toolbox
summary
Декларативный GUI-фреймворк для Go с явной реактивной областью видимости, собираемый в единый статический бинарник
tags
golang, gui, desktop, cross-platform, watchlist
language
Go
license
MIT
created
2026-04-24
updated
2026-04-24
lang
ru
translation_of
gova
source_updated
2026-04-24
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Gova - декларативный GUI-фреймворк для Go. Десктопные приложения пишутся на чистом Go и компилируются в единый статический бинарник под macOS, Windows и Linux - без Chromium, без рантайма JavaScript и без бандлинга ассетов. Преимущество перед Fyne - модель реактивности; преимущество перед Wails/Tauri - отсутствие встроенного браузера.

Проект внесён в watchlist - репозиторий создан 2026-04-22, за два дня до появления этой записи. Один автор, нет тегированных релизов, pre-1.0. Концепция интересна для отслеживания, но для продакшена здесь пока ничего не готово.

Отличительная черта: явный реактивный scope

Состояние, сигналы и эффекты живут в значении Scope, которое видно в коде и можно передавать дальше. Никаких скрытых планировщиков, правил порядка вызова хуков и сюрпризов с лишними перерисовками. Компонент счётчика:

package main

import . "github.com/nv404/gova"

var Counter = Define(func(s *Scope) View {
  count := State(s, 0)

  return VStack(
    Text(count.Format("Count: %d")).Font(Title),
    Button("+", func() { count.Update(func(n int) int { return n + 1 }) }),
    Button("-", func() { count.Update(func(n int) int { return n - 1 }) }),
  )
})

func main() { Run("Counter", Counter) }

View - это обычные структуры Go. Props - поля структур. Значения по умолчанию - нулевые значения типов. Композиция - вызовы функций. Компилятор проверяет интерфейс точно так же, как и любой другой код на Go. По форме это ближе к SwiftUI, чем к React: вместо объявления "хуков", которые неявно цепляются к глобальному стеку, вы просто принимаете аргумент *Scope, и зависимости между компонентами остаются на виду.

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

Нюансы переносимости

Поддержка платформ асимметрична:

Возможность macOS Windows Linux
Горячая перезагрузка через gova dev да да да
Иконка приложения во время работы да да да
Нативные диалоговые окна NSAlert / NSOpenPanel fallback на Fyne fallback на Fyne
Интеграция с Dock NSDockTile запланировано запланировано

Так что "нативные диалоговые окна везде" на деле означает "NSAlert на macOS, а на остальных платформах Fyne рисует окно, выглядящее как Fyne". Это честно, но переносимость фреймворка на двух платформах из трёх опирается на Fyne. Если внешний вид Fyne на Linux вас не устраивает, Gova эту проблему не решит.

cgo требуется на всех платформах (Xcode CLT на macOS, build-essential + libgl1-mesa-dev на Linux, mingw-w64 на Windows). Соответственно, кросс-компиляция сопряжена со всеми привычными трудностями cgo.

CLI

Три команды, установка через go install github.com/nv404/gova/cmd/gova@latest:

  • gova dev - отслеживает .go-файлы, пересобирает при сохранении, перезапускает окно. По умолчанию игнорирует .git, node_modules, vendor, _test.go.
  • gova build - статический бинарник под текущую платформу. Для уменьшения размера можно скомбинировать с -ldflags "-s -w".
  • gova run - сборка и однократный запуск без отслеживания файлов. Полезно в CI для smoke-тестов.

Размеры и потребление ресурсов

Замеры на macOS arm64 с Go 1.26.2, пример со счётчиком:

  • Бинарник по умолчанию: 32 МБ
  • Без отладочной информации (-ldflags "-s -w"): 23 МБ
  • Память в простое: ~80 МБ RSS

Для сравнения: приложение на Wails обычно весит 10-20 МБ, но использует системный webview (так что ресурсы тратятся в другом месте); приложение на Electron весит от 150 МБ. Gova относится к тому же классу со встроенным собственным рантаймом, что и Fyne, что вполне ожидаемо: под капотом для платформ, отличных от macOS, используется именно Fyne.

Статус

  • Создан: 2026-04-22
  • Звёзды: 78 (на момент добавления, 2026-04-24)
  • Релизы: тегов пока нет
  • Открытые issues: 0
  • Один автор (nv404), принят один PR от сообщества
  • README гласит: "pre-1.0 and the API is still moving"

Сигналы для повторной проверки к 2026-07-24: остаётся ли поддержка Windows/Linux на уровне fallback'а на Fyne? Стабилизировался ли API? Появились ли теги v0.x? Продолжился ли рост звёзд или застыл на пике после запуска?

Repo: https://github.com/nv404/gova - 78 звёзд, MIT.