WebAssembly, Javascript birlikte çalışabilirliği ile tarayıcıda daha fazla dil çalıştırmak için tasarlanmış modern teknolojilerden biridir.
WebAssembly (WASM), etkinleştirme ortamlarında (ör. web ve sunucu uygulamaları) çalışacak programlama dilleri için taşınabilir bir derleme hedefi olarak tasarlanmış yığın tabanlı sanal makineler için platformdan bağımsız, ikili bir talimat biçimidir.
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'da 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 .
mac'teki mesaj mesaj göndermiyor
Bu yapılandırmaları yapmak için çalışma dizininizin terminalinde bu komutu çalıştırın.
Set GOARCH=wasm GOOS=js
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
go 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.
birinin seni snapchatte engellediğini nasıl anlarsın
cp "$(go env GOROOT)/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.
node 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.
<!DOCTYPE html>
<!--
Copyright 2018 The Go Authors. All rights reserved.
Use of this source code is governed by a BSD-style
license that can be found in the LICENSE file.
-->
<html>
<head>
<meta charset="utf-8" />
<title>Go wasm</title>
</head>
<body>
<script src="wasm_exec.js"></script>
<script>
if (!WebAssembly.instantiateStreaming) {
// polyfill
WebAssembly.instantiateStreaming = async (resp, importObject) => {
const source = await (await resp).arrayBuffer();
return await WebAssembly.instantiate(source, importObject);
};
}
const go = new Go();
let mod, inst;
WebAssembly.instantiateStreaming(fetch("lib.wasm"), go.importObject).then(
result => {
mod = result.module;
inst = result.instance;
document.getElementById("runButton").disabled = false;
}
);
async function run() {
await go.run(inst);
inst = await WebAssembly.instantiate(mod, go.importObject); // reset instance
}
</script>
<button onClick="run();" id="runButton" disabled>Run</button>
</body>
</html>
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.
import (
"log"
"net/http"
)
Adres üzerinde hizmet vermek istediğiniz dosyaların sunucu adresi ve dizini için değişken tanımlayabilirsiniz.
var (
serverAddr = ":8080"
directory = "."
)
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.
func main() {
serveFiles := http.FileServer(http.Dir(directory))
if err := http.ListenAndServe(serverAddr, serveFiles); err != nil {
log.Fatalln(err)
}
}
İç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.
69FFFA8BC9B6474F8AD847FF4FDFFD3434E1B467bu 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.
func RegisterCallbackFunctions() {
js.Global().Set("print", js.FuncOf(print))
}
bu RegisterCallbackFonksiyonları yöntemi kaydeder Yazdır tarayıcı konsolunda kullanabileceğiniz bir geri arama işlevi olarak işlev görür.
android 2015 için en iyi metin uygulamaları
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.