Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

WebAssembly er en af ​​de moderne teknologier designet til at køre flere sprog på browseren med Javascript interoperabilitet.

WebAssembly (WASM) er et platformsuafhængigt, binært instruktionsformat til stack-baserede virtuelle maskiner designet som et bærbart kompileringsmål for programmeringssprog til at køre på aktiverende miljøer (dvs. internettet og serveren) apps).

Med WASM kan du køre flere programmeringssprog, inklusive Go, på din browser og udnytte sprogets funktioner. Samarbejde også med Javascript på nettet.

Kom godt i gang med WebAssembly in Go

Go giver førsteklasses support til at bruge WebAssembly i dine Go-applikationer, du behøver kun at lave nogle få konfigurationer og kompilere Go-kode til WebAssembly.

Du skal lave et par konfigurationer for at transpilere din Go-kode til WebAssembly. Du bliver nødt til at ændre din Go-arkitektur GOARCH miljøvariabel til wasm og Go-operativsystemet GOOS variabel til js.

instagram viewer

Kør denne kommando i terminalen i dit arbejdsbibliotek for at foretage disse konfigurationer.

Indstil GOARCH=wasm GOOS=js 

Det næste trin er at transpilere din Go-kode til en WebAssembly .wasm fil. Kør denne kommando for at transpilere din main.go fil til en fil med navnet lib.wasm

gå bygge -o lib.wasm main.go

Når du kører kommandoen, finder du en lib.wasm i din arbejdsmappe.

Du skal kopiere WebAssembly-filen, der følger med din Go-installation, til din arbejdsmappe for at udføre WebAssembly-filen med NodeJS på en webside.

cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .

Kommandoen kopierer wasm_exec.js fil til din arbejdsmappe og fungerer som indgang til din applikation.

Du kan nu bruge wasm_exec.js script til at udføre dine WASM-filer med Go and make DOM API opkald.

node wasm_exec.js main.wasm

Start af en webserver for at være vært for webstedet

Tilføj denne kode fra Go-forfatterne til en HTML-fil i din arbejdsmappe for at instantiere en WebAssembly-datastrøm med instantiateStreaming metode.



Copyright 2018 The Go Authors. Alle rettigheder forbeholdes.
Brugen af ​​denne kildekode er styret af en BSD-lignende
licens, der kan findes i LICENS-filen.



"utf-8" />
Gå wasm





HTML-koden er fra Go Authors, til at instansiere en WebAssembly-stream, der forbinder din Go-kode med websiden.

Start af en webserver for at køre siden

Du vil opsætte serveren med http pakke. Importer http pakken og log pakke til at logge mulige fejl til konsollen.

importere (
"log"
"net/http"
)

Du kan erklære variabler for serveradressen og biblioteket for de filer, du vil vise på adressen.

var (
serverAddr = ":8080"
mappe = "."
)

Du kan bruge Filserver metoden til http pakke til at betjene filer i en specificeret mappe. Det Filserver metoden tager mappen ind og returnerer en filserverforekomst.

funcvigtigste() {
serveFiles := http. FileServer (http. Dir (mappe))
hvis fejl := http. ListenAndServe (serverAddr, serveFiles); fejl!= nul {
log. Fatalln (fejl)
}
}

I den vigtigste funktion, erklærede du en filserverforekomstvariabel til at betjene filerne i rodmappen. Det ListenAndServe metoden serverer filerne i den angivne mappe på den angivne port.

WebAssembly-funktioner i Go

Go giver funktionalitet til at kalde JS-funktioner og interagere med DOM i syscall/js pakke.

Det js pakken giver adgang til WebAssembly-værtsmiljøer på js/wasm arkitektur. Du skal have dit udviklingsmiljø sat op til GOARCH=wasm GOOS=js for at få adgang til og bruge pakken.

Du kan bruge de forskellige metoder i pakken til at interagere med din webside. Her er hvordan du kan registrere funktioner med js pakke.

// funktionsdefinition
funcPrint(denne js. Værdi, i []js. Værdi)interface{} {
Vend tilbage js. ValueOf (i[:])
}

Det Print funktion ved registrering som en tilbagekaldsfunktion vil udlæse de data, der sendes til funktionen i browserkonsollen.

Du kan registrere tilbagekaldsfunktioner med Sæt metoden til Global metoden til js pakke. Det Sæt metoden indtager funktionsidentifikatoren og en tilbagekaldsfunktionsinstans.

funcRegistrer Tilbagekaldsfunktioner() {
js. Global().Set("Print", js. FuncOf(Print))
}

Det Registrer Tilbagekaldsfunktioner metoden registrerer Print fungere som en tilbagekaldsfunktion, som du kan bruge i browserkonsollen.

WebAssembly er en eksperimentel funktion på mange sprog, inklusive Go

WebAssembly-funktioner er relativt nye for mange sprog, især da sproget for nylig blev en W3C-standard. Det js pakken er eksperimentel, og pakken er undtaget fra Go-kompatibilitetsløftet.