Özet - WASM ve embedded
- Go kursu
- Uzman
- Ders 30/34
- 4 dk
WASM ve TinyGo'yu birleştirerek bir platform analizi yazarsın.
WASM ve gömülü özeti
Go aynı koddan çok farklı hedefler üretir: GOOS=js GOARCH=wasm ile tarayıcı, GOOS=wasip1 ile WASI çalışma ortamları, GOOS=linux GOARCH=arm ile gömülü Linux, TinyGo ile mikrodenetleyiciler. Hedefe özel kod //go:build ve dosya son ekleriyle ayrılır; iş mantığı saf fonksiyonlarda ortak kalır.
Mimari öneri
Çok hedefli bir projede kodu üçe ayır: çekirdek (saf Go, yan etkisiz, her hedefte derlenir), bağdaştırıcılar (hedefe özel: syscall/js, os, machine) ve giriş noktaları (her hedef için ayrı main). Çekirdek normal go test ile test edilir; donanım ve tarayıcı yalnızca ince bağdaştırıcı katmanında kalır.
Uygulama Ortak çekirdek
Her hedefte çalışacak saf bir çekirdek yaz: ortalama(olcum []float64) float64 boş dilimde 0 döndürsün. Bir adaptörü taklit eden func yaz(f func(string), v float64) ile sonucu fmt.Println'a ilet. []float64{20, 22, 24} için çalıştır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func ortalama(olcum []float64) float64 {
if len(olcum) == 0 {
return 0
}
t := 0.0
for _, v := range olcum {
t += v
}
return t / float64(len(olcum))
}
func yaz(f func(string), v float64) {
f(fmt.Sprintf("%.1f", v))
}
func main() {
yaz(func(s string) { fmt.Println(s) }, ortalama([]float64{20, 22, 24}))
}Beklenen çıktı
22.0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Tarayıcıda 200 KB altında bir Go modülü gerekiyorsa hangisi seçilir?
- cgo
- GOOS=wasip1
- TinyGo ile WASM Doğru cevap
- Standart Go ile WASM
Açıklama: Standart Go WASM çıktısı çalışma zamanı yüzünden MB düzeyindedir; TinyGo onlarca KB'lık modüller üretebilir.
2 WASI hedefi
GOOS=____ GOARCH=wasm go build -o app.wasm
GOOS=wasip1 GOARCH=wasm go build -o app.wasm
Açıklama: wasip1, WASI Preview 1 arayüzünü hedefleyen GOOS değeridir.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
js/wasm |
Tarayıcı |
wasip1/wasm |
Wasmtime, Wasmer |
linux/arm |
Gömülü Linux |
TinyGo |
Mikrodenetleyici |