CodeBlanks Logo Icon CodeBlanks

WASM ve DOM

js paketiyle DOM'a erişmeyi öğrenirsin.

WASM ve DOM

syscall/js paketi Go'dan JavaScript nesnelerine erişir. js.Global() tarayıcının window nesnesidir:

doc := js.Global().Get("document")
el := doc.Call("getElementById", "sonuc")
el.Set("textContent", "Go'dan merhaba")

Go fonksiyonunu JS'ten çağrılabilir yapmak için js.FuncOf kullanılır; program bitmesin diye main sonunda select {} ile beklenir.

js.FuncOf ile olay

Bir butona tıklandığında Go kodu çalıştırmak:

topla := js.FuncOf(func(this js.Value, args []js.Value) any {
    return args[0].Int() + args[1].Int()
})
js.Global().Set("goTopla", topla)
// JavaScript: goTopla(2, 3) → 5

js.Func artık gerekmediğinde Release() çağrılmalıdır; aksi halde bellekte kalır. Go ile JS arasında her çağrı maliyetlidir; sık geçişlerden kaçınmak gerekir.

Uygulama Geri çağrı imzası

syscall/js yalnızca WASM'da derlendiği için imzayı taklit et: type Deger struct{ n int } ve func topla(args []Deger) any yaz; ilk iki argümanın n değerlerini toplasın. topla([]Deger{{2}, {3}}) sonucunu yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Deger struct{ n int }

func topla(args []Deger) any {
    return args[0].n + args[1].n
}

func main() {
    fmt.Println(topla([]Deger{{2}, {3}}))
}

Beklenen çıktı

5

Soru ve cevaplar

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

1 Go WASM programı neden <code>select {}</code> ile biter?

  • DOM'u yüklemek için
  • main dönerse program biter ve JS'e verilen Go fonksiyonları çalışmaz Doğru cevap
  • Performansı artırmak için
  • Hata yakalamak için

Açıklama: select {} sonsuza kadar bekler; böylece çalışma zamanı ayakta kalır ve olay geri çağrıları işlenir.

2 JS metodunu çağır

Soru
el := js.Global().Get("document").____("getElementById", "kutu")
Cevap
el := js.Global().Get("document").Call("getElementById", "kutu")

Açıklama: Call bir JS nesnesinin metodunu verilen argümanlarla çağırır.

3 syscall/js

Kavram Anlamı
js.Global() window nesnesi
Get Özellik okur
Set Özellik yazar
js.FuncOf Go fonksiyonunu JS'e açar

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