Ваше первое приложение
Создайте работающее приложение Wails за 10 минут
Мы создадим простое приложение с приветствием, демонстрирующее основные концепции Wails:
- Бэкенд на Go, управляющий логикой
- Фронтенд, вызывающий функции Go
- Типобезопасные привязки
- Горячая перезагрузка во время разработки
Время выполнения: 10 минут
Создание проекта
Создайте проект
wails3 init -n myapp
cd myapp
Будет создан новый проект с шаблоном Vanilla + Vite по умолчанию (HTML/CSS/TypeScript и сборщик Vite).
Разберитесь в структуре проекта
myapp/
├── main.go # Application entry point
├── greetservice.go # Greet service
├── frontend/ # Your UI code
│ ├── index.html # HTML entry point
│ ├── src/
│ │ └── main.ts # Frontend TypeScript
│ ├── public/
│ │ └── style.css # Styles
│ ├── package.json # Frontend dependencies
│ ├── tsconfig.json # TypeScript configuration
│ └── vite.config.ts # Vite bundler config
├── build/ # Build configuration
└── Taskfile.yml # Build tasksЗапустите приложение
wails3 dev
Откроется приложение с интерфейсом приветствия. Введите своё имя и нажмите «Приветствовать» — бэкенд на 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)
}Основные концепции:
- Сервис — структура Go с экспортируемыми методами
- Экспортируемый метод — имя
Greetначинается с прописной буквы, поэтому метод доступен фронтенду - Простая логика — принимает имя и возвращает приветствие
- Типобезопасность — типы входных и выходных данных определены
Регистрация сервиса
Откройте main.go и найдите регистрацию сервиса:
err := application.New(application.Options{
Name: "myapp",
Services: []application.Service{
application.NewService(&GreetService{}),
},
// ... other options
})Так вы зарегистрируете 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 возвращают Promise
- Обработка ошибок — ошибки из 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 компилируется с оптимизациями
- Фронтенд собирается для рабочей среды (с минификацией)
- В
bin/создаётся нативный исполняемый файл
Результат: bin/myapp.exe
Запустите двойным щелчком. Зависимости не требуются (WebView2 входит в состав Windows).
Результат: bin/myapp.app
Перетащите в папку Applications или запустите двойным щелчком.
Результат: bin/myapp
Запустите с помощью ./bin/myapp или создайте файл .desktop для средства запуска.
Что мы узнали
Структура проекта
main.goдля серверной части на Gofrontend/для кода пользовательского интерфейсаTaskfile.ymlдля задач сборки
Сервисы
- Создавайте структуры Go с экспортируемыми методами
- Регистрируйте с помощью
application.NewService() - Методы автоматически становятся доступны во фронтенде
Привязки
- Автоматически создаваемые определения TypeScript
- Типобезопасные вызовы функций
- Асинхронность по умолчанию (Promise)
Процесс разработки
wails3 devдля горячей перезагрузки- При изменениях в коде Go приложение автоматически пересобирается и перезапускается
- Изменения во фронтенде мгновенно применяются с помощью горячей перезагрузки
Есть вопросы? Присоединяйтесь к Discord и задайте их сообществу.