WebAssembly
- Go kursu
- Uzman
- Ders 25/34
- 4 dk
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.wasmGo 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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
GOOS=js GOARCH=____ go build -o main.wasm
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 |