Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

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.

instagram viewer

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.