Lewati ke konten

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

  1. Generate proyek

    Terminal window
    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

    Terminal window
    wails3 dev

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

Mari pahami kode yang membuat ini berfungsi.

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

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.

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

Mari tambahkan fitur baru untuk memahami alur kerjanya.

  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.

Saat Anda siap mendistribusikan aplikasi:

Terminal window
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).

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.