Aplikasi Pertama Anda

Kita akan membangun aplikasi sapa sederhana yang mendemonstrasikan konsep inti Wails:

  • Backend Go yang mengelola logika
  • Frontend yang memanggil fungsi Go
  • Binding type-safe
  • Hot reload selama pengembangan

Waktu penyelesaian: 10 menit

Buat Proyek Anda

1

Generate proyek

bash
wails3 init -n myapp
cd myapp

Ini membuat proyek baru dengan template default Vanilla + Vite (HTML/CSS/TypeScript dengan bundler Vite).

2

Pahami struktur proyek

myapp/
├── main.go              # Titik masuk aplikasi
├── greetservice.go      # Layanan Greet
├── frontend/            # Kode UI Anda
│   ├── index.html       # Titik masuk HTML
│   ├── src/
│   │   └── main.ts      # TypeScript frontend
│   ├── public/
│   │   └── style.css    # Styles
│   ├── package.json     # Dependensi frontend
│   ├── tsconfig.json    # Konfigurasi TypeScript
│   └── vite.config.ts   # Konfigurasi bundler Vite
├── build/               # Konfigurasi build
└── Taskfile.yml         # Tugas build
3

Jalankan aplikasi

bash
wails3 dev

Aplikasi terbuka menampilkan antarmuka sapa. Masukkan nama Anda dan klik “Greet” — backend Go memproses input Anda dan mengembalikan sapaan.

Cara Kerjanya

Mari pahami kode yang membuat ini berfungsi.

Backend Go

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

Konsep utama:

  1. Service — Struct Go dengan method yang diekspor
  2. Method yang dieksporGreet diawali huruf kapital, sehingga tersedia untuk frontend
  3. Logika sederhana — Menerima nama, mengembalikan sapaan
  4. Type safety — Tipe input dan output didefinisikan

Mendaftarkan Service

Buka main.go dan temukan pendaftaran service:

main.go
err := application.New(application.Options{
    Name: "myapp",
    Services: []application.Service{
        application.NewService(&GreetService{}),
    },
    // ... other options
})

Ini mendaftarkan GreetService Anda ke Wails, sehingga semua method yang diekspor tersedia untuk frontend.

Frontend

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

Konsep utama:

  1. Binding otomatisGreetService diimpor dari kode yang dihasilkan
  2. Panggilan type-safe — Nama method dan signature cocok dengan kode Go Anda
  3. Async secara default — Semua panggilan Go mengembalikan Promise
  4. Penanganan error — Error dari Go ditangkap di try/catch

Kustomisasi Aplikasi Anda

Mari tambahkan fitur baru untuk memahami alur kerjanya.

Tambahkan Fitur “Greet Many”

1

Tambahkan method ke GreetService

Tambahkan ini ke 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

Aplikasi akan rebuild otomatis

Simpan file dan wails3 dev akan otomatis rebuild kode Go Anda dan me-restart aplikasi.

3

Gunakan di frontend

Tambahkan ini ke 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);
};

Buka konsol browser dan panggil greetMany() — Anda akan melihat array sapaan.

Build untuk Produksi

Saat Anda siap mendistribusikan aplikasi:

bash
wails3 build

Apa yang dilakukan ini:

  • Mengompilasi kode Go dengan optimasi
  • Build frontend untuk produksi (minified)
  • Membuat executable native di bin/

Output: bin/myapp.exe

Double-click untuk menjalankan. Tidak ada dependensi yang diperlukan (WebView2 sudah bagian dari Windows).

Yang telah kita pelajari

Struktur Proyek

  • main.go untuk backend Go
  • frontend/ untuk kode UI
  • Taskfile.yml untuk tugas build

Service

  • Buat struct Go dengan method yang diekspor
  • Daftarkan dengan application.NewService()
  • Method otomatis tersedia di frontend

Binding

  • Definisi TypeScript otomatis
  • Panggilan fungsi type-safe
  • Async secara default (Promise)

Alur Kerja Pengembangan

  • wails3 dev untuk hot reload
  • Perubahan Go otomatis rebuild dan restart
  • Perubahan frontend hot-reload secara instan

Ada pertanyaan? Bergabunglah dengan Discord dan tanyakan ke komunitas.

Edit page

Last updated: