Seu primeiro aplicativo
Crie um aplicativo Wails funcional em 10 minutos
Vamos criar um aplicativo simples de saudação que demonstra os principais conceitos do Wails:
- Backend em Go gerenciando a lógica
- Frontend chamando funções Go
- Bindings com segurança de tipos
- Hot reload durante o desenvolvimento
Tempo para concluir: 10 minutos
Crie seu projeto
Gere o projeto
wails3 init -n myapp
cd myapp
Isso cria um novo projeto com o template padrão Vanilla + Vite (HTML/CSS/TypeScript com o empacotador Vite).
Entenda a estrutura do projeto
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 tasksExecute o aplicativo
wails3 dev
O aplicativo abre e exibe uma interface de saudação. Digite seu nome e clique em “Saudar”: o backend em Go processa a entrada e retorna uma saudação.
Como funciona
Vamos entender o código que faz isso funcionar.
O backend em Go
Abra 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)
}Principais conceitos:
- Serviço — Uma struct Go com métodos exportados
- Método exportado —
Greetcomeça com letra maiúscula, o que o disponibiliza ao frontend - Lógica simples — Recebe um nome e retorna uma saudação
- Segurança de tipos — Os tipos de entrada e saída são definidos
Registro do serviço
Abra main.go e localize o registro do serviço:
err := application.New(application.Options{
Name: "myapp",
Services: []application.Service{
application.NewService(&GreetService{}),
},
// ... other options
})Isso registra seu GreetService no Wails, disponibilizando todos os seus métodos exportados ao frontend.
O frontend
Abra 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);
}
};Principais conceitos:
- Bindings gerados automaticamente —
GreetServiceé importado do código gerado - Chamadas com segurança de tipos — Os nomes e as assinaturas dos métodos correspondem ao seu código Go
- Assíncrono por padrão — Todas as chamadas Go retornam Promises
- Tratamento de erros — Os erros do Go são capturados em try/catch
Personalize seu aplicativo
Vamos adicionar um novo recurso para entender o fluxo de trabalho.
Adicione o recurso “Saudar vários”
Adicione o método a GreetService
Adicione o seguinte a 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
}O aplicativo será recompilado automaticamente
Salve o arquivo, e wails3 dev recompilará automaticamente seu código Go e reiniciará o aplicativo.
Use-o no frontend
Adicione o seguinte a frontend/src/main.js:
window.greetMany = async () => {
const names = ['Alice', 'Bob', 'Charlie'];
const greetings = await GreetService.GreetMany(names);
console.log(greetings);
};Abra o console do navegador e chame greetMany() — você verá o array de saudações.
Compile para produção
Quando estiver pronto para distribuir seu aplicativo:
wails3 build
O que isso faz:
- Compila o código Go com otimizações
- Compila o frontend para produção (minificado)
- Cria um executável nativo em
bin/
Saída: bin/myapp.exe
Clique duas vezes para executar. Não é necessário instalar dependências (o WebView2 faz parte do Windows).
Saída: bin/myapp.app
Arraste para a pasta Aplicativos ou clique duas vezes para executar.
Saída: bin/myapp
Execute com ./bin/myapp ou crie um arquivo .desktop para o inicializador.
O que aprendemos
Estrutura do projeto
main.gopara o backend em Gofrontend/para o código da interface do usuárioTaskfile.ymlpara tarefas de compilação
Serviços
- Crie structs em Go com métodos exportados
- Registre com
application.NewService() - Os métodos ficam automaticamente disponíveis no frontend
Bindings
- Definições TypeScript geradas automaticamente
- Chamadas de função com segurança de tipos
- Assíncrono por padrão (Promises)
Fluxo de trabalho de desenvolvimento
wails3 devpara recarregamento automático- Alterações no código Go recompilam e reiniciam o aplicativo automaticamente
- Alterações no frontend são recarregadas instantaneamente
Tem alguma dúvida? Entre no Discord e pergunte à comunidade.