WebAssembly, Javascript birlikte çalışabilirliği ile tarayıcıda daha fazla dil çalıştırmak için tasarlanmış modern teknolojilerden biridir.
WebAssembly (WASM), şu şekilde tasarlanmış yığın tabanlı sanal makineler için platformdan bağımsız, ikili bir yönerge biçimidir: programlama dillerinin etkinleştirme ortamlarında (ör. web ve sunucu) çalıştırılması için taşınabilir bir derleme hedefi uygulamalar).
WASM ile tarayıcınızda Go dahil olmak üzere birçok programlama dilini çalıştırabilir ve dilin özelliklerinden yararlanabilirsiniz. Ayrıca, web üzerinde Javascript ile birlikte çalışın.
Go'da WebAssembly'a Başlarken
Go, Go uygulamalarınızda WebAssembly'ı kullanmak için birinci sınıf destek sağlar, yalnızca birkaç yapılandırma yapmanız ve Go kodunu WebAssembly'de derlemeniz gerekir.
Go kodunuzu WebAssembly'a aktarmak için birkaç yapılandırma yapmanız gerekecek. Go mimarinizi değiştirmeniz gerekecek
GOARCH ortam değişkeni wasm ve Go işletim sistemi GOOS değişken js.Bu yapılandırmaları yapmak için çalışma dizininizin terminalinde bu komutu çalıştırın.
GOARCH=wasm GOOS=js'yi ayarlayın
Bir sonraki adım, Go kodunuzu bir WebAssembly'ye aktarmaktır. .wasm dosya. aktarmak için bu komutu çalıştırın ana.git adlı bir dosyaya dosya lib.wasm
git build -o lib.wasm main.go
Komutu çalıştırırken, bir lib.wasm çalışma dizininizde.
WebAssembly dosyasını bir web sayfasında NodeJS ile çalıştırmak için, Go kurulumunuzla birlikte gelen WebAssembly dosyasını çalışma dizininize kopyalamanız gerekir.
CP "$(env GOROOT'a git)/misc/wasm/wasm_exec.js" .
komut kopyalar wasm_exec.js dosyasını çalışma dizininize kaydeder ve uygulamanız için giriş noktası görevi görür.
şimdi kullanabilirsiniz wasm_exec.js WASM dosyalarınızı Go ve make ile yürütmek için komut dosyası DOM API'si çağrılar.
düğüm wasm_exec.js main.wasm
Web Sitesini Barındırmak İçin Bir Web Sunucusu Başlatma
ile bir WebAssembly veri akışının örneğini oluşturmak için Go yazarlarından bu kodu çalışma dizininizdeki bir HTML dosyasına ekleyin. akış başlatma yöntem.
Telif Hakkı 2018 Go Yazarları. Tüm hakları saklıdır.
Bu kaynak kodun kullanımı, LİSANS dosyasında bulunabilen BSD tarzı bir lisansa tabidir.
"utf-8" />Git wasm
HTML kodu, Go kodunuzu web sayfasına bağlayan bir WebAssembly akışını başlatmak için Go Yazarlarından alınmıştır.
Sayfayı Çalıştırmak İçin Bir Web Sunucusu Başlatma
yapacaksın ile sunucuyu kurun http paket. içe aktar http paket ve kayıt olası hataları konsola kaydetmek için paket.
içe aktarmak (
"kayıt"
"ağ/http"
)
Adres üzerinde hizmet vermek istediğiniz dosyaların sunucu adresi ve dizini için değişken tanımlayabilirsiniz.
var (
serverAddr = ":8080"
dizin = "."
)
kullanabilirsiniz Dosya sunucusu yöntemi http belirli bir dizindeki dosyaları sunmak için paket. bu Dosya sunucusu yöntem dizini alır ve bir dosya sunucusu örneği döndürür.
işlevana() {
serveFiles := http. Dosya Sunucusu (http. Dizin (dizin))
eğer hata := http. ListenAndServe (serverAddr, serveFiles); hata!= sıfır {
kayıt. Fatalln (hata)
}
}
İçinde ana işlevi, kök dizindeki dosyalara hizmet vermek için bir dosya sunucusu örneği değişkeni bildirdiniz. bu Dinle ve Sun yöntem, belirtilen bağlantı noktasında belirtilen dizindeki dosyalara hizmet eder.
Go'da WebAssembly İşlevleri
Go, JS işlevlerini çağırmak ve DOM ile etkileşimde bulunmak için işlevsellik sağlar. sistem çağrısı/js paket.
bu js paketi, WebAssembly ana bilgisayar ortamlarına erişim sağlar. js/wasm mimari. Geliştirme ortamınızı şu şekilde ayarlamanız gerekir: GOARCH=wasm GOOS=js pakete erişmek ve kullanmak için.
Web sayfanızla etkileşim kurmak için paketteki çeşitli yöntemleri kullanabilirsiniz. İşlevleri şu şekilde kaydedebilirsiniz: js paket.
// fonksiyon tanımı
işlevYazdır(bu js. Değer, ben []js. Değer)arayüz{} {
geri dönmek js. DeğerOf (i[:])
}
bu Yazdır işlevi, bir geri arama işlevi olarak kayıt sırasında tarayıcı konsolundaki işleve iletilen verilerin çıktısını alacaktır.
ile geri arama fonksiyonlarını kaydedebilirsiniz. Ayarlamak yöntemi küresel yöntemi js paket. bu Ayarlamak yöntem, işlev tanımlayıcısını ve bir geri arama işlevi örneğini alır.
işlevRegisterCallbackFonksiyonları() {
js. Global().Set("Yazdır", js. FuncOf(Yazdır))
}
bu RegisterCallbackFonksiyonları yöntemi kaydeder Yazdır tarayıcı konsolunda kullanabileceğiniz bir geri arama işlevi olarak işlev görür.
WebAssembly, Go Dahil Birçok Dilde Deneysel Bir Özelliktir
WebAssembly özellikleri, özellikle dil yakın zamanda bir W3C standardı haline geldiğinden beri, birçok dil için nispeten yenidir. bu js paket deneyseldir ve paket Go uyumluluk taahhüdünden muaftır.