WebAssembly is een van de moderne technologieën die zijn ontworpen om meer talen in de browser uit te voeren met Javascript-interoperabiliteit.
WebAssembly (WASM) is een platformonafhankelijk, binair instructieformaat voor op stapel gebaseerde virtuele machines die zijn ontworpen als een draagbaar compilatiedoel voor programmeertalen die kunnen worden uitgevoerd op ondersteunende omgevingen (d.w.z. het web en de server applicaties).
Met WASM kunt u verschillende programmeertalen, waaronder Go, in uw browser uitvoeren en de functies van de taal benutten. Werk ook samen met Javascript op internet.
Aan de slag met WebAssembly in Go
Go biedt eersteklas ondersteuning voor het gebruik van WebAssembly in uw Go-applicaties, u hoeft slechts enkele configuraties uit te voeren en Go-code in WebAssembly te compileren.
U moet een paar configuraties maken om uw Go-code om te zetten in WebAssembly. U moet uw Go-architectuur wijzigen
GOARCH omgevingsvariabele naar wasm en Go-besturingssysteem GOOS variabel naar js.Voer deze opdracht uit in de terminal van uw werkdirectory om deze configuraties te maken.
Zet GOARCH=wasm GOOS=js
De volgende stap is om uw Go-code om te zetten in een WebAssembly .wasm bestand. Voer deze opdracht uit om uw hoofd.go bestand naar een bestand met de naam lib.wasm
ga bouwen -o lib.wasm main.go
Bij het uitvoeren van de opdracht vindt u een lib.wasm in je werkmap.
U moet het WebAssembly-bestand dat bij uw Go-installatie hoort naar uw werkmap kopiëren om het WebAssembly-bestand met NodeJS op een webpagina uit te voeren.
kp "$(ga naar GOROOT)/misc/wasm/wasm_exec.js" .
De opdracht kopieert het wasm_exec.js bestand naar uw werkdirectory en dient als toegangspunt tot uw toepassing.
U kunt nu de wasm_exec.js script om uw WASM-bestanden uit te voeren met Go and make DOM-API oproepen.
knooppunt wasm_exec.js main.wasm
Een webserver starten om de website te hosten
Voeg deze code van de Go-auteurs toe aan een HTML-bestand in uw werkmap om een WebAssembly-gegevensstroom te instantiëren met de instantiërenStreaming methode.
Copyright 2018 The Go-auteurs. Alle rechten voorbehouden.
Het gebruik van deze broncode is onderworpen aan een
licentie in BSD-stijl die te vinden is in het LICENSE-bestand.
"utf-8" />Ga wasm
De HTML-code is van de Go-auteurs, voor het instantiëren van een WebAssembly-stream die uw Go-code verbindt met de webpagina.
Een webserver starten om de pagina uit te voeren
Je zult stel de server in met de http pakket. Importeer de http pakket en de loggen pakket voor het loggen van mogelijke fouten in de console.
importeren (
"logboek"
"net/http"
)
U kunt variabelen declareren voor het serveradres en de directory van de bestanden die u op het adres wilt aanbieden.
var (
serverAddr = ":8080"
map = "."
)
U kunt de Bestanden server methode van de http pakket om bestanden in een opgegeven map te serveren. De Bestanden server methode neemt de map op en retourneert een instantie van de bestandsserver.
funcvoornaamst() {
serveFiles := http. Fileserver (http. Dir (map))
als fout := http. ListenAndServe (serverAddr, serveFiles); fout!= nihil {
loggen. fataal (fout)
}
}
In de voornaamst functie, hebt u een instantievariabele van de bestandsserver gedeclareerd om de bestanden in de hoofdmap te bedienen. De ListenAndServe methode bedient de bestanden in de opgegeven map op de opgegeven poort.
WebAssembly-functies in Go
Go biedt functionaliteit voor het aanroepen van JS-functies en interactie met de DOM in de syscall/js pakket.
De js pakket biedt toegang tot WebAssembly-hostomgevingen op het js/wasm architectuur. U moet uw ontwikkelomgeving hebben ingesteld op de GOARCH=wasm GOOS=js om toegang te krijgen tot het pakket en het te gebruiken.
U kunt de verschillende methoden in het pakket gebruiken om met uw webpagina te communiceren. Hier ziet u hoe u functies kunt registreren met de js pakket.
// functiedefinitie
funcafdrukken(deze js. Waarde, ik []js. Waarde)koppel{} {
opbrengst js. Waardevan (i[:])
}
De afdrukken functie bij registratie als terugbelfunctie zal de gegevens uitvoeren die zijn doorgegeven aan de functie in de browserconsole.
U kunt terugbelfuncties registreren met de Set methode van de Globaal methode van de js pakket. De Set methode neemt de functie-identificatie en een call-back functie-instantie in.
funcRegistreer CallbackFunctions() {
js. Globaal().Set("afdrukken", js. FuncVan(afdrukken))
}
De Registreer CallbackFunctions methode registreert de afdrukken functie als terugbelfunctie die u in de browserconsole kunt gebruiken.
WebAssembly is een experimentele functie in vele talen, waaronder Go
WebAssembly-functies zijn relatief nieuw voor veel talen, vooral omdat de taal onlangs een W3C-standaard is geworden. De js pakket is experimenteel en het pakket is vrijgesteld van de Go-compatibiliteitsbelofte.