Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

WebAssembly este una dintre tehnologiile moderne concepute pentru a rula mai multe limbi pe browser cu interoperabilitate Javascript.

WebAssembly (WASM) este un format de instrucțiuni binare, independent de platformă, pentru mașinile virtuale bazate pe stivă, concepute ca o țintă de compilare portabilă pentru limbajele de programare care să ruleze în medii compatibile (de exemplu, web și server aplicații).

Cu WASM, puteți rula mai multe limbaje de programare, inclusiv Go, în browser și puteți valorifica caracteristicile limbajului. De asemenea, interoperați cu Javascript pe web.

Noțiuni introductive cu WebAssembly în Go

Go oferă suport de primă clasă pentru utilizarea WebAssembly în aplicațiile Go, trebuie doar să faceți câteva configurații și să compilați codul Go în WebAssembly.

Va trebui să faceți câteva configurații pentru a transpila codul Go în WebAssembly. Va trebui să vă schimbați arhitectura Go

instagram viewer
GOARCH variabila de mediu la wasm și sistemul de operare Go GOOS variabilă la js.

Rulați această comandă în terminalul directorului dvs. de lucru pentru a face aceste configurații.

Setați GOARCH=wasm GOOS=js 

Următorul pas este să transpilați codul Go într-un WebAssembly .wasm fişier. Rulați această comandă pentru a transpila dvs principal.go fișier într-un fișier numit lib.wasm

du-te construi -o lib.wasm main.go

La rularea comenzii, veți găsi un lib.wasm în directorul dvs. de lucru.

Trebuie să copiați fișierul WebAssembly care însoțește instalarea Go în directorul de lucru pentru a executa fișierul WebAssembly cu NodeJS pe o pagină web.

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

Comanda copiază fișierul wasm_exec.js fișier în directorul dvs. de lucru și servește drept punct de intrare în aplicația dvs.

Acum puteți utiliza wasm_exec.js script pentru a executa fișierele WASM cu Go and make API-ul DOM apeluri.

nodul wasm_exec.js main.wasm

Pornirea unui server web pentru a găzdui site-ul web

Adăugați acest cod de la autorii Go într-un fișier HTML din directorul dvs. de lucru pentru a instanția un flux de date WebAssembly cu instantiateStreaming metodă.



Drepturi de autor 2018 The Go Authors. Toate drepturile rezervate.
Utilizarea acestui cod sursă este guvernată de o licență în stil BSD
care poate fi găsită în fișierul LICENSE.



"utf-8" />
Du-te wasm





Codul HTML este de la Go Authors, pentru instanțierea unui flux WebAssembly care conectează codul Go la pagina web.

Pornirea unui server web pentru a rula pagina

vei configurați serverul cu http pachet. Importă http pachetul și Buturuga pachet pentru înregistrarea posibilelor erori în consolă.

import (
"Buturuga"
"net/http"
)

Puteți declara variabile pentru adresa serverului și directorul fișierelor pe care doriți să le serviți la adresa.

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

Puteți folosi FileServer metoda de http pachet pentru a servi fișiere într-un director specificat. The FileServer metoda preia directorul și returnează o instanță de server de fișiere.

funcprincipal() {
serveFiles := http. FileServer (http. Dir (director))
dacă greșit := http. ListenAndServe (serverAddr, serveFiles); greș!= zero {
Buturuga. Fatalln (eră)
}
}

În principal funcție, ați declarat o variabilă de instanță a serverului de fișiere pentru a servi fișierele din directorul rădăcină. The ListenAndServe metoda servește fișierele din directorul specificat pe portul specificat.

Funcții WebAssembly în Go

Go oferă funcționalitate pentru apelarea funcțiilor JS și interacțiunea cu DOM-ul în syscall/js pachet.

The js pachetul oferă acces la mediile gazdă WebAssembly de pe js/wasm arhitectură. Va trebui să aveți mediul de dezvoltare configurat pentru GOARCH=wasm GOOS=js pentru a accesa și utiliza pachetul.

Puteți utiliza diferitele metode din pachet pentru a interacționa cu pagina dvs. web. Iată cum puteți înregistra funcții cu js pachet.

// definiția funcției
funcimprimare(acest js. Valoare, i []js. Valoare)interfață{} {
întoarcere js. ValueOf (i[:])
}

The imprimare funcția la înregistrare ca funcție de apel invers va scoate datele transmise funcției în consola browserului.

Puteți înregistra funcții de apel invers cu A stabilit metoda de Global metoda de js pachet. The A stabilit metoda preia identificatorul funcției și o instanță a funcției de apel invers.

funcÎnregistrați funcțiile de apel invers() {
js. Global().Set("imprimare", js. FuncOf(imprimare))
}

The Înregistrați funcțiile de apel invers metoda înregistrează imprimare funcționează ca o funcție de apel invers pe care o puteți utiliza în consola browserului.

WebAssembly este o caracteristică experimentală în multe limbi, inclusiv Go

Caracteristicile WebAssembly sunt relativ noi pentru multe limbi, mai ales că limbajul a devenit recent un standard W3C. The js pachetul este experimental, iar pachetul este scutit de promisiunea de compatibilitate Go.