CodeBlanks Logo Icon CodeBlanks

WebAssembly

Go'nun WASM hedefini öğrenirsin.

WebAssembly

WebAssembly (WASM), tarayıcılarda ve başka çalışma ortamlarında neredeyse yerel hızda çalışan taşınabilir bir ikili biçimdir. Go kodu WASM'a derlenebilir; böylece aynı iş mantığı hem sunucuda hem tarayıcıda çalışır.

GOOS=js GOARCH=wasm go build -o main.wasm
cp "$(go env GOROOT)/lib/wasm/wasm_exec.js" .

Tarayıcı tarafında wasm_exec.js Go çalışma zamanının ihtiyaç duyduğu köprüyü sağlar.

WASI

Tarayıcı dışında (Wasmtime, Wasmer, sunucusuz platformlar) çalışmak için Go 1.21 GOOS=wasip1 hedefini ekledi. WASI, dosya ve saat gibi sistem işlevlerine standart bir arayüz sunar:

GOOS=wasip1 GOARCH=wasm go build -o app.wasm
wasmtime app.wasm

Go 1.24 ile //go:wasmexport yönergesi Go fonksiyonlarını ana ortama dışa aktarabilir.

Uygulama Taşınabilir mantık

Hem sunucuda hem WASM'da kullanılacak saf bir fonksiyon yaz: kdv(fiyat float64) float64 fiyata %20 eklesin. fmt.Printf("%.2f\n", kdv(100)) yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func kdv(fiyat float64) float64 {
    return fiyat * 1.2
}

func main() {
    fmt.Printf("%.2f\n", kdv(100))
}

Beklenen çıktı

120.00

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Go WASM ikilisi neden genellikle birkaç MB'tır?

  • WASM sıkıştırılamaz
  • Tarayıcı ekler
  • Hata ayıklama kapatılamaz
  • Go çalışma zamanı (GC, zamanlayıcı) ikiliye dahildir Doğru cevap

Açıklama: Standart Go, çalışma zamanını her ikiliye gömer; küçük WASM gerekiyorsa TinyGo tercih edilir.

2 Hedef mimari

Soru
GOOS=js GOARCH=____ go build -o main.wasm
Cevap
GOOS=js GOARCH=wasm go build -o main.wasm

Açıklama: GOARCH=wasm WebAssembly mimarisini hedefler; GOOS=js tarayıcı ortamını seçer.

3 Hedef ve ortam

Kavram Anlamı
GOOS=js Tarayıcı / Node.js
GOOS=wasip1 WASI çalışma ortamları
wasm_exec.js JS köprüsü
//go:wasmexport Fonksiyonu dışa aktar

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