Wails: ставка Golang на создание настольных приложений уровня Electron

원제 · Wails: Golang's Bet On Desktop Grade Apps To Beat Electron

7:022분 읽기Better Stack2026. 07. 25.컴퓨터/소프트웨어 · AI/미래기술

핵심 요약

Wails предоставляет легковесную альтернативу Electron с размером бандла 52 МБ и высокой производительностью благодаря бэкенду на Go и системному WebView, однако требует написания нативного кода на Objective-C при отсутствии нужных Go-библиотек.

하이라이트

  • Использование системного движка рендеринга вместо Chromium сокращает размер дистрибутива Wails до 52 МБ по сравнению с 324 МБ у Electron.

  • Автоматическая генерация TypeScript-типов при запуске wails dev синхронизирует интерфейс с бэкендом на Go в режиме реального времени.

  • Запись экрана через системный API ScreenCaptureKit на Wails и Tauri снижает нагрузку на систему по сравнению со стандартным захватом видео через WebView в Electron.

  • Среднее время горячего запуска Wails составляет 395 мс, а холодного — 2337 мс.

  • Отсутствие готовых Go-библиотек для работы с ScreenCaptureKit требует написания порядка 450 строк нативного кода на Objective-C через Cgo.

타임라인

  1. Архитектура Wails и принципы работы бэкенда

    Архитектурный подход Wails аналогичен Tauri, но использует Go вместо Rust для обработки системных вызовов. Отказ от тяжелого компонента Chromium снижает итоговый размер компилируемого файла. Взаимодействие между интерфейсом и логикой происходит через вызовы нативных API, управляемых на стороне Go.

    • Wails использует системный движок рендеринга вместо встраивания полного дистрибутива Chromium.
    • Бэкенд приложения пишется на Golang, а интерфейс формируется с помощью стандартных веб-технологий через WebView.
    • Технология обеспечивает сборку бинарных файлов для операционных систем macOS и Windows.
  2. Интеграция Go и React через автогенерацию TypeScript

    Конфигурация окна, включая заголовок, размеры и специфичные для конкретной ОС параметры, задается в main.go. Фреймворк автоматически создает JavaScript- и TypeScript-обертки для функций Go в директории wails.js/go. Любое редактирование Go-файлов перезапускает десктопное приложение и мгновенно обновляет интерфейс.

    • Структура проекта разделяет код на изолированную папку frontend и входной Go-файл main.go.
    • Режим wails dev автоматически генерирует TypeScript-типы при изменениях в Go-коде.
    • Удаление или изменение функции на бэкенде моментально вызывает ошибку компиляции на фронтенде.
  3. Сравнение размера сборок, времени запуска и производительности

    Показатели холодного запуска с очисткой кэша составляют 2337 мс для Wails, 2049 мс для Tauri и 1890 мс для Electron. Производительность записи видео в Wails выше из-за прямого обращения к системным API macOS без передачи тяжелого видеопотока через внутренний мост фреймворка. Использование системного WebView несет риск проявления незначительных различий в рендеринге на разных операционных системах.

    • Размер итогового бандла Wails составляет 52 МБ, Tauri — 57 МБ, Electron — 324 МБ.
    • Среднее время стандартного запуска Wails составляет 395 мс против 410 мс у Tauri и 350 мс у Electron.
    • Использование нативного ScreenCaptureKit обеспечивает Wails более высокую скорость захвата экрана по сравнению со стандартным WebView Electron.
  4. Особенности разработки и экосистема системных библиотек

    Механизм Cgo позволяет включать C-код и файлы .m прямо в Go-проект и связывать их с фреймворками Apple. Это дает полный контроль над исходным кодом, но увеличивает трудозатраты по сравнению с Tauri, где экосистема Rust уже содержит готовые библиотечные обертки. Выбор между фреймворками определяется предпочитаемым языком программирования бэкенда и готовностью писать нативный код.

    • В экосистеме Go отсутствуют готовые обертки для ScreenCaptureKit, что требует использования Cgo.
    • Интеграция с нативным API macOS на Wails потребовала написания 450 строк кода на Objective-C.
    • Крейт screen capture kit в Rust позволяет реализовать аналогичную логику в Tauri без нативного C-кода.

설명

You already write Go, so why bundle a whole Chromium to ship a desktop app? Wails builds cross-platform desktop apps on the system webview, 52 MB against Electron's 324. The catch is the developer experience: where Tauri leans on Rust crates, Go can leave you hand-writing Objective-C. Worth it if you're choosing a desktop stack. 🔗 Relevant Links https://wails.io https://github.com/wailsapp/wails ❤️ More about us Radically better observability stack: https://betterstack.com/ Written tutorials: https://betterstack.com/community/ Example projects: https://github.com/BetterStackHQ 📱 Socials Twitter: https://twitter.com/betterstackhq Instagram: https://www.instagram.com/betterstackhq/ TikTok: https://www.tiktok.com/@betterstack LinkedIn: https://www.linkedin.com/company/betterstack 📌 Chapters: 0:00 What is Wails? 0:33 How Wails works (Go + native webview) 1:06 Demo: the screen recorder app 1:29 Project structure: main.go and the frontend 1:57 React frontend and auto-generated bindings 2:50 Live reload with wails dev 3:24 Bundle size: Wails vs Tauri vs Electron 4:07 Startup time 4:36 Runtime performance 5:07 Developer experience 5:37 Writing Objective-C with CGo 6:07 Verdict: Wails or Tauri? 6:40 Outro

커뮤니티 글

모든 글 보기
이 영상에 대해 글쓰기