Ваше первое приложение
Мы создадим простое приветственное приложение, которое демонстрирует основные концепции Wails:
- Бэкенд на Go, управляющий логикой
- Фронтенд, вызывающий функции Go
- Типобезопасные привязки (bindings)
- Горячая перезагрузка (hot reload) во время разработки
Время на выполнение: 10 минут
Создание вашего проекта
Сгенерируйте проект
wails3 init -n myapp
cd myapp
Это создаст новый проект с шаблоном по умолчанию Vanilla + Vite (чистый HTML/CSS/JS с сборщиком Vite).
Поймите структуру проекта
myapp/
├── main.go # Точка входа приложения
├── greetservice.go # Сервис приветствия
├── frontend/ # Код вашего интерфейса
│ ├── index.html # Точка входа HTML
│ ├── src/
│ │ └── main.js # JavaScript фронтенда
│ ├── public/
│ │ └── style.css # Стили
│ ├── package.json # Зависимости фронтенда
│ └── vite.config.js # Конфигурация сборщика Vite
├── build/ # Конфигурация сборки
└── Taskfile.yml # Задачи сборкиЗапустите приложение
wails3 dev
Приложение откроется, показывая интерфейс приветствия. Введите свое имя и нажмите “Greet” — бэкенд на Go обработает ваш ввод и вернет приветствие.
Как это работает
Давайте разберем код, который обеспечивает эту работу.
Бэкенд на Go
Откройте greetservice.go:
package main
import (
"fmt"
)
type GreetService struct{}
func (g *GreetService) Greet(name string) string {
return fmt.Sprintf("Hello %s, It's show time!", name)
}Ключевые концепции:
- Сервис (Service) — структура Go с экспортируемыми методами
- Экспортируемый метод —
Greetнаписан с заглавной буквы, что делает его доступным для фронтенда - Простая логика — принимает имя и возвращает приветствие
- Типобезопасность — типы входных и выходных данных определены
Регистрация сервиса
Откройте main.go и найдите регистрацию сервиса:
err := application.New(application.Options{
Name: "myapp",
Services: []application.Service{
application.NewService(&GreetService{}),
},
// ... другие опции
})Это регистрирует ваш GreetService в Wails, делая все его экспортируемые методы доступными для фронтенда.
Фронтенд
Откройте frontend/src/main.js:
import {GreetService} from "../bindings/changeme";
window.greet = async () => {
const nameElement = document.getElementById('name');
const resultElement = document.getElementById('result');
const name = nameElement.value;
if (!name) {
return;
}
try {
const result = await GreetService.Greet(name);
resultElement.innerText = result;
} catch (err) {
console.error(err);
}
};Ключевые концепции:
- Автоматически сгенерированные привязки —
GreetServiceимпортируется из сгенерированного кода - Типобезопасные вызовы — имена методов и сигнатуры соответствуют вашему коду Go
- Асинхронность по умолчанию — все вызовы Go возвращают Promises
- Обработка ошибок — ошибки из Go перехватываются в try/catch
Настройка вашего приложения
Давайте добавим новую функцию, чтобы понять рабочий процесс.
Добавьте функцию “Приветствовать многих”
Добавьте метод в GreetService
Добавьте это в greetservice.go:
func (g *GreetService) GreetMany(names []string) []string {
greetings := make([]string, len(names))
for i, name := range names {
greetings[i] = fmt.Sprintf("Hello %s!", name)
}
return greetings
}Приложение автоматически пересоберется
Сохраните файл, и wails3 dev автоматически пересоберет ваш код Go и перезапустит приложение.
Используйте его во фронтенде
Добавьте это в frontend/src/main.js:
window.greetMany = async () => {
const names = ['Alice', 'Bob', 'Charlie'];
const greetings = await GreetService.GreetMany(names);
console.log(greetings);
};Откройте консоль браузера и вызовите greetMany() — вы увидите массив приветствий.
Сборка для продакшена
Когда вы будете готовы распространять ваше приложение:
wails3 build
Что это делает:
- Компилирует код Go с оптимизациями
- Собирает фронтенд для продакшена (минифицированный)
- Создает нативный исполняемый файл в
build/bin/
Результат: build/bin/myapp.exe
Дважды щелкните, чтобы запустить. Зависимости не требуются (WebView2 является частью Windows).
Результат: build/bin/myapp.app
Перетащите в папку Приложения или дважды щелкните, чтобы запустить.
Результат: build/bin/myapp
Запустите с помощью ./build/bin/myapp или создайте файл .desktop для вашего лаунчера.
Что мы узнали
Структура проекта
main.goдля бэкенда Gofrontend/для кода интерфейсаTaskfile.ymlдля задач сборки
Сервисы
- Создавайте структуры Go с экспортируемыми методами
- Регистрируйте с помощью
application.NewService() - Методы автоматически становятся доступны во фронтенде
Привязки
- Автоматически сгенерированные определения TypeScript
- Типобезопасные вызовы функций
- Асинхронность по умолчанию (Promises)
Рабочий процесс разработки
wails3 devдля горячей перезагрузки- Изменения в Go автоматически пересобираются и перезапускают приложение
- Изменения во фронтенде перезагружаются мгновенно
Вопросы? Присоединяйтесь к Discord и спрашивайте сообщество.