CodeBlanks Logo Icon CodeBlanks

Özet - WASM ve embedded

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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
GOOS=____ GOARCH=wasm go build -o app.wasm
Cevap
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

Uzman bölümündeki tüm dersler