WebAssembly je jedna z moderných technológií navrhnutá na spustenie viacerých jazykov v prehliadači s interoperabilitou Javascriptu.
WebAssembly (WASM) je binárny formát inštrukcií nezávislý na platforme pre virtuálne stroje založené na zásobníkoch navrhnutý ako prenosný cieľ kompilácie pre programovacie jazyky, ktoré sa majú spúšťať v prostrediach umožňujúcich prevádzku (t. j. web a server). aplikácie).
Pomocou WASM môžete vo svojom prehliadači spustiť niekoľko programovacích jazykov vrátane Go a využiť funkcie tohto jazyka. Spolupracujte aj s Javascriptom na webe.
Začíname s WebAssembly v Go
Go poskytuje prvotriednu podporu pre používanie WebAssembly vo vašich aplikáciách Go, stačí vykonať niekoľko konfigurácií a skompilovať kód Go do WebAssembly.
Na prenos kódu Go do WebAssembly budete musieť vykonať niekoľko konfigurácií. Budete musieť zmeniť architektúru Go GOARCH prostredie premenné na wasm a Go operačný systém GOOS premenlivý na js.
Ak chcete vykonať tieto konfigurácie, spustite tento príkaz v termináli vášho pracovného adresára.
Nastavte GOARCH=wasm GOOS=js
Ďalším krokom je transpilácia vášho Go kódu do WebAssembly .wam súbor. Spustite tento príkaz na transpiláciu main.go súbor do súboru s názvom lib.wasm
go build -o lib.wasm main.go
Po spustení príkazu nájdete a lib.wasm vo vašom pracovnom adresári.
Ak chcete spustiť súbor WebAssembly s NodeJS na webovej stránke, musíte skopírovať súbor WebAssembly sprevádzajúci vašu inštaláciu Go do vášho pracovného adresára.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Príkaz skopíruje súbor wasm_exec.js súbor do vášho pracovného adresára a slúži ako vstupný bod do vašej aplikácie.
Teraz môžete použiť wasm_exec.js skript na spustenie vašich súborov WASM pomocou Go and make DOM API hovory.
uzol wasm_exec.js main.wasm
Spustenie webového servera na hosťovanie webovej stránky
Pridajte tento kód od autorov Go do súboru HTML vo svojom pracovnom adresári, aby ste vytvorili inštanciu dátového toku WebAssembly s instantiateStreaming metóda.
Autorské práva 2018 The Go Authors. Všetky práva vyhradené.
Používanie tohto zdrojového kódu sa riadi
licenciou v štýle BSD, ktorú nájdete v súbore LICENSE.
"utf-8" />Choď wasm
Kód HTML pochádza od autorov Go na vytvorenie inštancie streamu WebAssembly, ktorý spája váš kód Go s webovou stránkou.
Spustenie webového servera na spustenie stránky
budete nastaviť server s http balík. Importovať http balík a log balík na zaznamenávanie možných chýb do konzoly.
importovať (
"log"
"net/http"
)
Môžete deklarovať premenné pre adresu servera a adresár súborov, ktoré chcete na adrese obsluhovať.
var (
serverAddr = ":8080"
adresár = "."
)
Môžete použiť Súborový server metóda http balík na poskytovanie súborov v zadanom adresári. The Súborový server metóda vezme adresár a vráti inštanciu súborového servera.
funcHlavná() {
serveFiles := http. Súborový server (http. Adresár (adresár))
ak chyba := http. ListenAndServe (serverAddr, serveFiles); chyba!= nula {
log. Fatalln (chyba)
}
}
V Hlavná deklarovali ste premennú inštancie súborového servera na obsluhu súborov v koreňovom adresári. The Počúvajte a podávajte metóda obsluhuje súbory v zadanom adresári na zadanom porte.
WebAssembly Functions in Go
Go poskytuje funkcie na volanie funkcií JS a interakciu s DOM v syscall/js balík.
The js balík poskytuje prístup k hostiteľským prostrediam WebAssembly na js/wasm architektúra. Budete musieť mať svoje vývojové prostredie nastavené na GOARCH=wasm GOOS=js na prístup a používanie balíka.
Na interakciu s vašou webovou stránkou môžete použiť rôzne metódy v balíku. Tu je postup, ako môžete zaregistrovať funkcie v js balík.
// definícia funkcie
funcvytlačiť(toto js. Hodnota, i []js. hodnota)rozhranie{} {
vrátiť js. ValueOf (i[:])
}
The vytlačiť funkcia pri registrácii ako funkcia spätného volania vypíše údaje odovzdané funkcii v konzole prehliadača.
Funkcie spätného volania môžete zaregistrovať na Set metóda globálne metóda js balík. The Set metóda preberá identifikátor funkcie a inštanciu funkcie spätného volania.
funcRegisterCallbackFunctions() {
js. Global().Set("tlač", js. FuncOf(vytlačiť))
}
The RegisterCallbackFunctions metóda registruje vytlačiť funguje ako funkcia spätného volania, ktorú môžete použiť v konzole prehliadača.
WebAssembly je experimentálna funkcia v mnohých jazykoch, vrátane Go
Funkcie WebAssembly sú v mnohých jazykoch relatívne nové, najmä preto, že sa tento jazyk nedávno stal štandardom W3C. The js Balík je experimentálny a na balík sa nevzťahuje prísľub kompatibility Go.