Aplikasi Pertama Anda
Bangun aplikasi Wails yang berfungsi dalam 10 menit
Kita akan membangun aplikasi sapaan sederhana yang menunjukkan konsep inti Wails:
- Backend Go yang mengelola logika
- Frontend yang memanggil fungsi Go
- Binding yang aman secara tipe
- Hot reload selama pengembangan
Waktu penyelesaian: 10 menit
Buat Proyek Anda
Buat proyek
wails3 init -n myapp
cd myapp
Tindakan ini membuat proyek baru dengan templat Vanilla + Vite bawaan (HTML/CSS/TypeScript dengan bundler Vite).
Pahami struktur proyek
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 tasksJalankan aplikasi
wails3 dev
Aplikasi terbuka dan menampilkan antarmuka sapaan. Masukkan nama Anda lalu klik “Greet”—backend Go akan memproses input Anda dan mengembalikan sapaan.
Cara Kerjanya
Mari pahami kode yang membuatnya berfungsi.
Backend Go
Buka 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:
- Layanan—Struct Go dengan metode yang diekspor
- Metode yang diekspor—
Greetdiawali huruf kapital sehingga tersedia bagi frontend - Logika sederhana—Menerima nama dan mengembalikan sapaan
- Keamanan tipe—Tipe input dan output telah ditentukan
Mendaftarkan Layanan
Buka main.go dan temukan pendaftaran layanan:
err := application.New(application.Options{
Name: "myapp",
Services: []application.Service{
application.NewService(&GreetService{}),
},
// ... other options
})Tindakan ini mendaftarkan GreetService Anda ke Wails sehingga semua metode yang diekspor tersedia bagi frontend.
Frontend
Buka 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:
- Binding yang dibuat secara otomatis—
GreetServicediimpor dari kode yang dihasilkan - Pemanggilan yang aman secara tipe—Nama dan signature metode sesuai dengan kode Go Anda
- Asinkron secara bawaan—Semua pemanggilan Go mengembalikan Promise
- Penanganan kesalahan—Kesalahan dari Go ditangkap dalam try/catch
Sesuaikan Aplikasi Anda
Mari tambahkan fitur baru untuk memahami alur kerjanya.
Tambahkan Fitur “Sapa Banyak Orang”
Tambahkan metode ke GreetService
Tambahkan kode berikut ke 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
}Aplikasi akan di-build ulang secara otomatis
Simpan berkas tersebut dan wails3 dev akan secara otomatis mem-build ulang kode Go Anda serta memulai ulang aplikasi.
Gunakan di frontend
Tambahkan kode berikut ke 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:
wails3 build
Yang dilakukan proses ini:
- Mengompilasi kode Go dengan pengoptimalan
- Mem-build frontend untuk produksi (diperkecil)
- Membuat executable native di
bin/
Output: bin/myapp.exe
Klik dua kali untuk menjalankannya. Tidak memerlukan dependensi (WebView2 merupakan bagian dari Windows).
Output: bin/myapp.app
Seret ke folder Applications atau klik dua kali untuk menjalankannya.
Output: bin/myapp
Jalankan dengan ./bin/myapp atau buat file .desktop untuk peluncur Anda.
Yang telah kita pelajari
Struktur Proyek
main.gountuk backend Gofrontend/untuk kode UITaskfile.ymluntuk tugas build
Layanan
- Buat struct Go dengan method yang diekspor
- Daftarkan dengan
application.NewService() - Method tersedia secara otomatis di frontend
Binding
- Definisi TypeScript yang dibuat secara otomatis
- Pemanggilan fungsi yang aman terhadap tipe
- Asinkron secara default (Promise)
Alur Kerja Pengembangan
wails3 devuntuk hot reload- Perubahan Go secara otomatis memicu build ulang dan mulai ulang
- Perubahan frontend langsung dimuat ulang dengan hot reload
Ada pertanyaan? Bergabunglah dengan Discord dan tanyakan kepada komunitas.