Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

WebAssembly er en av de moderne teknologiene designet for å kjøre flere språk på nettleseren med Javascript interoperabilitet.

WebAssembly (WASM) er et plattformuavhengig, binært instruksjonsformat for stabelbaserte virtuelle maskiner designet som et bærbart kompileringsmål for programmeringsspråk som skal kjøres på muliggjørende miljøer (dvs. nettet og serveren) apper).

Med WASM kan du kjøre flere programmeringsspråk, inkludert Go, på nettleseren din og utnytte funksjonene til språket. Samarbeid også med Javascript på nettet.

Komme i gang med WebAssembly in Go

Go gir førsteklasses støtte for bruk av WebAssembly i Go-applikasjonene dine, du trenger bare å gjøre noen få konfigurasjoner og kompilere Go-kode til WebAssembly.

Du må gjøre noen få konfigurasjoner for å transpilere Go-koden til WebAssembly. Du må endre Go-arkitekturen din GOARCH miljøvariabel til wasm og Go-operativsystemet GOOS variabel til js.

instagram viewer

Kjør denne kommandoen i terminalen til arbeidskatalogen din for å gjøre disse konfigurasjonene.

Sett GOARCH=wasm GOOS=js 

Det neste trinnet er å transpilere Go-koden til en WebAssembly .wasm fil. Kjør denne kommandoen for å transpilere din main.go fil til en fil med navn lib.wasm

gå bygge -o lib.wasm main.go

Når du kjører kommandoen, finner du en lib.wasm i arbeidskatalogen din.

Du må kopiere WebAssembly-filen som følger med Go-installasjonen til arbeidskatalogen for å kjøre WebAssembly-filen med NodeJS på en nettside.

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

Kommandoen kopierer wasm_exec.js filen til arbeidskatalogen din og fungerer som inngangspunktet til applikasjonen din.

Du kan nå bruke wasm_exec.js skript for å kjøre WASM-filene dine med Go and make DOM API samtaler.

node wasm_exec.js main.wasm

Starte en webserver for å være vert for nettstedet

Legg til denne koden fra Go-forfatterne til en HTML-fil i arbeidskatalogen din for å instansiere en WebAssembly-datastrøm med instantiateStreaming metode.



Opphavsrett 2018 The Go Authors. Alle rettigheter forbeholdt.
Bruk av denne kildekoden er styrt av en BSD-stil
lisens som finnes i LICENSE-filen.



"utf-8" />
Gå wasm





HTML-koden er fra Go Authors, for å instansiere en WebAssembly-strøm som kobler Go-koden til nettsiden.

Starte en webserver for å kjøre siden

Du vil sett opp serveren med http pakke. Importer http pakken og Logg pakke for å logge mulige feil til konsollen.

import (
"Logg"
"net/http"
)

Du kan deklarere variabler for serveradressen og katalogen til filene du vil vise på adressen.

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

Du kan bruke Filserver metoden for http pakke for å betjene filer i en spesifisert katalog. De Filserver metoden tar inn katalogen og returnerer en filserverforekomst.

funchoved-() {
serveFiles := http. Filserver (http. Dir (katalog))
hvis feil := http. ListenAndServe (serverAddr, serveFiles); feil!= null {
Logg. Fatalln (feil)
}
}

I hoved- funksjon, erklærte du en filserverforekomstvariabel for å betjene filene i rotkatalogen. De ListenAndServe metoden serverer filene i den angitte katalogen på den angitte porten.

WebAssembly-funksjoner i Go

Go gir funksjonalitet for å kalle JS-funksjoner og samhandle med DOM-en i syscall/js pakke.

De js pakken gir tilgang til WebAssembly vertsmiljøer på js/wasm arkitektur. Du må ha utviklingsmiljøet ditt satt opp til GOARCH=wasm GOOS=js for å få tilgang til og bruke pakken.

Du kan bruke de ulike metodene i pakken for å samhandle med nettsiden din. Her er hvordan du kan registrere funksjoner med js pakke.

// funksjonsdefinisjon
funcskrive ut(dette js. Verdi, i []js. Verdi)grensesnitt{} {
komme tilbake js. ValueOf (i[:])
}

De skrive ut funksjon ved registrering som en tilbakeringingsfunksjon vil sende ut dataene som sendes til funksjonen i nettleserkonsollen.

Du kan registrere tilbakeringingsfunksjoner med Sett metoden for Global metoden for js pakke. De Sett metoden tar inn funksjonsidentifikatoren og en tilbakeringingsfunksjon.

funcRegistrer tilbakeringingsfunksjoner() {
js. Global().Set("skrive ut", js. FuncOf(skrive ut))
}

De Registrer tilbakeringingsfunksjoner metoden registrerer skrive ut fungere som en tilbakeringingsfunksjon som du kan bruke i nettleserkonsollen.

WebAssembly er en eksperimentell funksjon på mange språk, inkludert Go

WebAssembly-funksjoner er relativt nye for mange språk, spesielt siden språket nylig ble en W3C-standard. De js pakken er eksperimentell, og pakken er unntatt fra Go-kompatibilitetsløftet.