WebAssembly är en av de moderna teknologierna utformade för att köra fler språk i webbläsaren med Javascript-kompatibilitet.
WebAssembly (WASM) är ett plattformsoberoende, binärt instruktionsformat för stackbaserade virtuella maskiner designade som ett portabelt kompileringsmål för programmeringsspråk att köras i möjliggörande miljöer (dvs webben och servern) appar).
Med WASM kan du köra flera programmeringsspråk, inklusive Go, i din webbläsare och utnyttja språkets funktioner. Samarbeta också med Javascript på webben.
Komma igång med WebAssembly in Go
Go ger förstklassigt stöd för att använda WebAssembly i dina Go-applikationer, du behöver bara göra några konfigurationer och kompilera Go-kod till WebAssembly.
Du måste göra några konfigurationer för att transpilera din Go-kod till WebAssembly. Du måste ändra din Go-arkitektur GOARCH miljövariabel till wasm och Go operativsystem GÅS variabel till js.
Kör detta kommando i terminalen i din arbetskatalog för att göra dessa konfigurationer.
Ställ in GOARCH=wasm GOOS=js
Nästa steg är att transpilera din Go-kod till en WebAssembly .wasm fil. Kör det här kommandot för att transpilera din main.go fil till en fil med namnet lib.wasm
gå bygga -o lib.wasm main.go
När du kör kommandot hittar du en lib.wasm i din arbetskatalog.
Du måste kopiera WebAssembly-filen som medföljer din Go-installation till din arbetskatalog för att exekvera WebAssembly-filen med NodeJS på en webbsida.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Kommandot kopierar wasm_exec.js filen till din arbetskatalog och fungerar som ingångspunkten till din applikation.
Du kan nu använda wasm_exec.js skript för att köra dina WASM-filer med Go and make DOM API samtal.
nod wasm_exec.js main.wasm
Starta en webbserver för att vara värd för webbplatsen
Lägg till den här koden från Go-författarna till en HTML-fil i din arbetskatalog för att instansiera en WebAssembly-dataström med instantiateStreaming metod.
Upphovsrätt 2018 The Go Authors. Med ensamrätt.
Användningen av den här källkoden styrs av en BSD-liknande
licens som finns i LICENSE-filen.
"utf-8" />Gå wasm
HTML-koden är från Go Authors, för att instansiera en WebAssembly-ström som kopplar din Go-kod till webbsidan.
Starta en webbserver för att köra sidan
Du kommer ställ in servern med http paket. Importera http paketet och logga paket för att logga möjliga fel till konsolen.
importera (
"logga"
"net/http"
)
Du kan deklarera variabler för serveradressen och katalogen för de filer du vill visa på adressen.
var (
serverAddr = ":8080"
katalog = "."
)
Du kan använda Fil server metod för http paket för att servera filer i en specificerad katalog. De Fil server metod tar in katalogen och returnerar en filserverinstans.
funchuvud() {
serveFiles := http. FileServer (http. Dir (katalog))
om fel := http. ListenAndServe (serverAddr, serveFiles); fel!= noll {
logga. Fatalln (fel)
}
}
I den huvud funktion, deklarerade du en filserverinstansvariabel för att tjäna filerna i rotkatalogen. De ListenAndServe metoden serverar filerna i den angivna katalogen på den angivna porten.
WebAssembly-funktioner i Go
Go tillhandahåller funktionalitet för att anropa JS-funktioner och interagera med DOM i syscall/js paket.
De js paketet ger tillgång till WebAssembly-värdmiljöer på js/wasm arkitektur. Du måste ha din utvecklingsmiljö inställd på GOARCH=wasm GOOS=js för att komma åt och använda paketet.
Du kan använda de olika metoderna i paketet för att interagera med din webbsida. Så här kan du registrera funktioner med js paket.
// funktionsdefinition
funcskriva ut(denna js. Värde, i []js. Värde)gränssnitt{} {
lämna tillbaka js. ValueOf (i[:])
}
De skriva ut funktion vid registrering som en återuppringningsfunktion kommer att mata ut data som skickas till funktionen i webbläsarkonsolen.
Du kan registrera återuppringningsfunktioner med Uppsättning metod för Global metod för js paket. De Uppsättning metoden tar in funktionsidentifieraren och en återuppringningsfunktionsinstans.
funcRegistreraCallbackFunctions() {
js. Global().Set("skriva ut", js. FuncOf(skriva ut))
}
De RegistreraCallbackFunctions metoden registrerar skriva ut fungera som en återuppringningsfunktion som du kan använda i webbläsarkonsolen.
WebAssembly är en experimentell funktion på många språk, inklusive Go
WebAssembly-funktioner är relativt nya för många språk, särskilt eftersom språket nyligen blev en W3C-standard. De js paketet är experimentellt och paketet är undantaget från Go-kompatibilitetslöftet.