WebAssembly je jednou z moderních technologií navržených pro provoz více jazyků v prohlížeči s interoperabilitou Javascriptu.
WebAssembly (WASM) je binární formát instrukcí nezávislý na platformě pro virtuální stroje založené na zásobníku navržené jako přenosný cíl kompilace pro programovací jazyky, které mají být spuštěny v prostředích umožňujících spuštění (tj. na webu a serveru aplikace).
S WASM můžete v prohlížeči spustit několik programovacích jazyků, včetně Go, a využít funkce tohoto jazyka. Spolupracujte také s Javascriptem na webu.
Začínáme s WebAssembly v Go
Go poskytuje prvotřídní podporu pro používání WebAssembly ve vašich aplikacích Go, stačí provést několik konfigurací a zkompilovat kód Go do WebAssembly.
K přenosu kódu Go do WebAssembly budete muset provést několik konfigurací. Budete muset změnit architekturu Go GOARCH proměnná prostředí k wasm a operační systém Go GOOS variabilní k js.
Spusťte tento příkaz v terminálu vašeho pracovního adresáře, abyste provedli tyto konfigurace.
Nastavte GOARCH=wasm GOOS=js
Dalším krokem je transpilace kódu Go do WebAssembly .wam soubor. Spusťte tento příkaz pro transpilaci vašeho main.go soubor do souboru s názvem lib.wasm
go build -o lib.wasm main.go
Při spuštění příkazu najdete a lib.wasm ve vašem pracovním adresáři.
Chcete-li spustit soubor WebAssembly s NodeJS na webové stránce, musíte zkopírovat soubor WebAssembly doprovázející vaši instalaci Go do vašeho pracovního adresáře.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Příkaz zkopíruje wasm_exec.js do vašeho pracovního adresáře a slouží jako vstupní bod do vaší aplikace.
Nyní můžete použít wasm_exec.js skript pro spuštění vašich souborů WASM pomocí Go and make DOM API hovory.
uzel wasm_exec.js main.wasm
Spuštění webového serveru pro hostování webových stránek
Přidejte tento kód od autorů Go do souboru HTML ve svém pracovním adresáři a vytvořte instanci datového toku WebAssembly s instantiateStreaming metoda.
Autorská práva 2018 The Go Authors. Všechna práva vyhrazena.
Použití tohoto zdrojového kódu se řídí
licence ve stylu BSD, kterou naleznete v souboru LICENSE.
"utf-8" />Jdi wasm
Kód HTML pochází od autorů Go pro vytvoření instance streamu WebAssembly, který propojí váš kód Go s webovou stránkou.
Spuštění webového serveru pro spuštění stránky
Budete nastavit server s http balík. Importujte http balíček a log balíček pro protokolování možných chyb do konzole.
import (
"log"
"net/http"
)
Můžete deklarovat proměnné pro adresu serveru a adresář souborů, které chcete na adrese obsluhovat.
var (
serverAddr = ":8080"
adresář = "."
)
Můžete použít Souborový server metoda http balíček pro poskytování souborů v určeném adresáři. The Souborový server metoda vezme adresář a vrátí instanci souborového serveru.
funchlavní() {
serveFiles := http. Souborový server (http. Adresář (adresář))
-li chyba := http. ListenAndServe (serverAddr, serveFiles); chyba!= nula {
log. Fatalln (chyba)
}
}
V hlavní deklarovali jste proměnnou instance souborového serveru, která bude obsluhovat soubory v kořenovém adresáři. The ListenAndServe metoda obsluhuje soubory v zadaném adresáři na zadaném portu.
Funkce WebAssembly v Go
Go poskytuje funkce pro volání funkcí JS a interakci s DOM v syscall/js balík.
The js balíček poskytuje přístup k hostitelským prostředím WebAssembly na js/wasm architektura. Budete muset mít své vývojové prostředí nastavené na GOARCH=wasm GOOS=js pro přístup a používání balíčku.
Pro interakci s vaší webovou stránkou můžete použít různé metody v balíčku. Zde je návod, jak můžete zaregistrovat funkce u js balík.
// definice funkce
functisk(toto js. Hodnota, i []js. Hodnota)rozhraní{} {
vrátit se js. ValueOf (i[:])
}
The tisk funkce při registraci jako funkce zpětného volání vypíše data předaná funkci v konzole prohlížeče.
Funkce zpětného volání můžete zaregistrovat u Soubor metoda Globální metoda js balík. The Soubor metoda přebírá identifikátor funkce a instanci funkce zpětného volání.
funcRegisterCallbackFunctions() {
js. Global().Set("tisk", js. FuncOf(tisk))
}
The RegisterCallbackFunctions metoda registruje tisk fungovat jako funkce zpětného volání, kterou můžete použít v konzole prohlížeče.
WebAssembly je experimentální funkce v mnoha jazycích, včetně Go
Funkce WebAssembly jsou v mnoha jazycích relativně nové, zejména proto, že se tento jazyk nedávno stal standardem W3C. The js balíček je experimentální a balíček nepodléhá příslibu kompatibility Go.