Pular para o conteúdo

Seu Primeiro App

Vamos construir um simples aplicativo de saudação que demonstra os conceitos principais do Wails:

  • Backend em Go gerenciando a lógica
  • Frontend chamando funções do Go
  • Bindings com tipagem segura
  • Hot reload durante o desenvolvimento

Tempo para concluir: 10 minutos

  1. Gere o projeto

    Terminal window
    wails3 init -n myapp
    cd myapp

    Isso cria um novo projeto com o modelo padrão Vanilla + Vite (HTML/CSS/JS puro com o bundler Vite).

  2. Entenda a estrutura do projeto

    myapp/
    ├── main.go # Ponto de entrada da aplicação
    ├── greetservice.go # Serviço de saudação
    ├── frontend/ # Seu código de UI
    │ ├── index.html # Ponto de entrada HTML
    │ ├── src/
    │ │ └── main.js # JavaScript do frontend
    │ ├── public/
    │ │ └── style.css # Estilos
    │ ├── package.json # Dependências do frontend
    │ └── vite.config.js # Configuração do bundler Vite
    ├── build/ # Configuração de build
    └── Taskfile.yml # Tarefas de build
  3. Execute o app

    Terminal window
    wails3 dev

    O app abre mostrando uma interface de saudação. Digite seu nome e clique em “Greet” - o backend Go processa sua entrada e retorna uma saudação.

Vamos entender o código que faz isso funcionar.

Abra greetservice.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)
}

Conceitos principais:

  1. Service - Uma struct Go com métodos exportados
  2. Método exportado - Greet está em maiúsculas, tornando-o disponível para o frontend
  3. Lógica simples - Recebe um nome e retorna uma saudação
  4. Tipagem segura - Os tipos de entrada e saída são definidos

Abra main.go e encontre o registro do service:

main.go
err := application.New(application.Options{
Name: "myapp",
Services: []application.Service{
application.NewService(&GreetService{}),
},
// ... outras opções
})

Isso registra seu GreetService com o Wails, tornando todos os seus métodos exportados disponíveis para o frontend.

Abra frontend/src/main.js:

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);
}
};

Conceitos principais:

  1. Bindings gerados automaticamente - GreetService é importado do código gerado
  2. Chamadas com tipagem segura - Os nomes dos métodos e suas assinaturas correspondem ao seu código Go
  3. Assíncrono por padrão - Todas as chamadas Go retornam Promises
  4. Tratamento de erros - Erros do Go são capturados em try/catch

Vamos adicionar um novo recurso para entender o fluxo de trabalho.

  1. Adicione o método ao GreetService

    Adicione isto ao greetservice.go:

    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
    }
  2. O app será reconstruído automaticamente

    Salve o arquivo e o wails3 dev reconstruirá automaticamente seu código Go e reiniciará o app.

  3. Use-o no frontend

    Adicione isto ao frontend/src/main.js:

    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.

Quando estiver pronto para distribuir seu app:

Terminal window
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 build/bin/

Saída: build/bin/myapp.exe

Clique duas vezes para executar. Nenhuma dependência necessária (WebView2 faz parte do Windows).

Estrutura do Projeto

  • main.go para o backend Go
  • frontend/ para o código da UI
  • Taskfile.yml para tarefas de build

Services

  • Crie structs Go com métodos exportados
  • Registre com application.NewService()
  • Métodos automaticamente disponíveis no frontend

Bindings

  • Definições TypeScript geradas automaticamente
  • Chamadas de função com tipagem segura
  • Assíncrono por padrão (Promises)

Fluxo de Trabalho de Desenvolvimento

  • wails3 dev para hot reload
  • Alterações no Go reconstruem e reiniciam automaticamente
  • Alterações no frontend têm hot reload instantâneo

Perguntas? Junte-se ao Discord e pergunte à comunidade.