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.