WebAssembly ist eine der modernen Technologien, die entwickelt wurde, um mehr Sprachen im Browser mit Javascript-Interoperabilität auszuführen.
WebAssembly (WASM) ist ein plattformunabhängiges, binäres Befehlsformat für Stack-basierte virtuelle Maschinen, das als konzipiert ist ein portables Kompilierungsziel für Programmiersprachen, die in unterstützenden Umgebungen (d. h. dem Web und Server) ausgeführt werden können Anwendungen).
Mit WASM können Sie mehrere Programmiersprachen, einschließlich Go, in Ihrem Browser ausführen und die Funktionen der Sprache nutzen. Interoperieren Sie auch mit Javascript im Web.
Erste Schritte mit WebAssembly in Go
Go bietet erstklassige Unterstützung für die Verwendung von WebAssembly in Ihren Go-Anwendungen, Sie müssen nur ein paar Konfigurationen vornehmen und Go-Code in WebAssembly kompilieren.
Sie müssen einige Konfigurationen vornehmen, um Ihren Go-Code in WebAssembly zu transpilieren. Sie müssen Ihre Go-Architektur ändern GOARCH Umgebungsvariable zu wasm und Go-Betriebssystem GUT variabel zu js.
Führen Sie diesen Befehl im Terminal Ihres Arbeitsverzeichnisses aus, um diese Konfigurationen vorzunehmen.
Setzen Sie GOARCH=wasm GOOS=js
Der nächste Schritt besteht darin, Ihren Go-Code in eine WebAssembly zu transpilieren .wasm Datei. Führen Sie diesen Befehl aus, um Ihre zu transpilieren main.go Datei in eine Datei namens lib.wasm
gehe build -o lib.wasm main.go
Beim Ausführen des Befehls finden Sie a lib.wasm in Ihrem Arbeitsverzeichnis.
Sie müssen die WebAssembly-Datei, die Ihrer Go-Installation beiliegt, in Ihr Arbeitsverzeichnis kopieren, um die WebAssembly-Datei mit NodeJS auf einer Webseite auszuführen.
vgl "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Der Befehl kopiert die wasm_exec.js Datei in Ihr Arbeitsverzeichnis und dient als Einstiegspunkt für Ihre Anwendung.
Sie können jetzt die verwenden wasm_exec.js Skript zum Ausführen Ihrer WASM-Dateien mit Go and make DOM-API Anrufe.
Knoten wasm_exec.js main.wasm
Starten eines Webservers zum Hosten der Website
Fügen Sie diesen Code von den Go-Autoren zu einer HTML-Datei in Ihrem Arbeitsverzeichnis hinzu, um einen WebAssembly-Datenstrom mit der zu instanziieren instantiateStreaming Methode.
Copyright 2018 Die Go-Autoren. Alle Rechte vorbehalten.
Die Verwendung dieses Quellcodes unterliegt einer BSD-ähnlichen
Lizenz, die in der LICENSE-Datei zu finden ist.
"utf-8" />Gehen Sie wasm
Der HTML-Code stammt von den Go-Autoren, um einen WebAssembly-Stream zu instanziieren, der Ihren Go-Code mit der Webseite verbindet.
Starten eines Webservers zum Ausführen der Seite
Du wirst Richten Sie den Server mit dem ein http Paket. Importieren Sie die http Paket und die Protokoll Paket zum Protokollieren möglicher Fehler in der Konsole.
importieren (
"Protokoll"
"net/http"
)
Sie können Variablen für die Serveradresse und das Verzeichnis der Dateien deklarieren, die Sie an der Adresse bereitstellen möchten.
Var (
serverAddr = ":8080"
Verzeichnis = "."
)
Du kannst den... benutzen Dateiserver Methode der http -Paket, um Dateien in einem bestimmten Verzeichnis bereitzustellen. Der Dateiserver -Methode übernimmt das Verzeichnis und gibt eine Dateiserverinstanz zurück.
Funkhauptsächlich() {
dienenDateien := http. Dateiserver (http. Dir (Verzeichnis))
Wenn Fehler := http. ListenAndServe (serverAddr, serveFiles); äh != Null {
Protokoll. Fatalln (äh)
}
}
Im hauptsächlich -Funktion haben Sie eine Dateiserver-Instanzvariable deklariert, um die Dateien im Stammverzeichnis bereitzustellen. Der ListenAndServe -Methode stellt die Dateien im angegebenen Verzeichnis am angegebenen Port bereit.
WebAssembly-Funktionen in Go
Go bietet Funktionen zum Aufrufen von JS-Funktionen und zum Interagieren mit dem DOM in der Systemaufruf/js Paket.
Der js -Paket bietet Zugriff auf WebAssembly-Hostumgebungen auf der js/wasm die Architektur. Sie müssen Ihre Entwicklungsumgebung entsprechend einrichten GOARCH=wasm GOOS=js um auf das Paket zuzugreifen und es zu verwenden.
Sie können die verschiedenen Methoden im Paket verwenden, um mit Ihrer Webseite zu interagieren. So können Sie Funktionen mit registrieren js Paket.
// Funktionsdefinition
Funkdrucken(dies js. Wert, ich []js. Wert)Schnittstelle{} {
zurückkehren js. WertVon (i[:])
}
Der drucken Funktion bei Registrierung als Callback-Funktion gibt die an die Funktion übergebenen Daten in der Browser-Konsole aus.
Mit dem können Sie Rückruffunktionen anmelden Satz Methode der Global Methode der js Paket. Der Satz -Methode übernimmt den Funktionsbezeichner und eine Callback-Funktionsinstanz.
FunkRegisterCallbackFunctions() {
js. Global().Set("drucken", js. FuncOf(drucken))
}
Der RegisterCallbackFunctions Methode registriert die drucken Funktion als Rückruffunktion, die Sie in der Browserkonsole verwenden können.
WebAssembly ist ein experimentelles Feature in vielen Sprachen, einschließlich Go
WebAssembly-Funktionen sind für viele Sprachen relativ neu, insbesondere seit die Sprache kürzlich zum W3C-Standard wurde. Der js Das Paket ist experimentell und das Paket ist vom Go-Kompatibilitätsversprechen ausgenommen.