Uvod u WebAssembly u Go

Uvod u WebAssembly u Go
Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

WebAssembly je jedna od modernih tehnologija dizajniranih za pokretanje više jezika u pregledniku s Javascript interoperabilnošću.





kako saznati koji je video izbrisan na youtube -u

WebAssembly (WASM) je format binarnih instrukcija neovisan o platformi za virtualne strojeve koji se temelje na stogu dizajniran kao prijenosni cilj kompilacije za programske jezike za izvođenje u okruženjima koja omogućuju (tj. web i poslužiteljske aplikacije).





S WASM-om možete pokrenuti nekoliko programskih jezika, uključujući Go, na svom pregledniku i iskoristiti značajke jezika. Također, interoperirajte s Javascriptom na webu.





Početak rada s WebAssemblyjem u Go

Go pruža prvoklasnu podršku za korištenje WebAssemblyja u vašim Go aplikacijama, samo trebate napraviti nekoliko konfiguracija i prevesti Go kod u WebAssembly.

Morat ćete napraviti nekoliko konfiguracija za transpiliranje vašeg Go koda u WebAssembly. Morat ćete promijeniti svoju Go arhitekturu GOARCH varijabla okoline to wasm i operativni sustav Go GOOS varijabla za js .



Pokrenite ovu naredbu na terminalu vašeg radnog direktorija da napravite ove konfiguracije.

 Set GOARCH=wasm GOOS=js  

Sljedeći korak je prevođenje vašeg Go koda u WebAssembly .wasm datoteka. Pokrenite ovu naredbu da transpilirate svoj glavni.krenuti datoteku u datoteku pod nazivom lib.wasm





 go build -o lib.wasm main.go 

Prilikom pokretanja naredbe, pronaći ćete a lib.wasm u vašem radnom imeniku.

Morate kopirati WebAssembly datoteku koja prati vašu Go instalaciju u vaš radni direktorij da biste izvršili WebAssembly datoteku s NodeJS na web stranici.





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

Naredba kopira wasm_exec.js datoteku u vaš radni direktorij i služi kao ulazna točka u vašu aplikaciju.

Sada možete koristiti wasm_exec.js skripta za izvršavanje vaših WASM datoteka s Go and make DOM API poziva.

 node wasm_exec.js main.wasm 

Pokretanje web poslužitelja za ugošćavanje web stranice

Dodajte ovaj kôd od Go autora u HTML datoteku u vašem radnom direktoriju kako biste instancirali tok podataka WebAssembly s instantiateStreaming metoda.

 <!DOCTYPE html> 
<!--
Copyright 2018 The Go Authors. All rights reserved.
Use of this source code is governed by a BSD-style
license that can be found in the LICENSE file.
-->

<html>
<head>
    <meta charset="utf-8" />
    <title>Go wasm</title>
</head>

<body>
<script src="wasm_exec.js"></script>

<script>
    if (!WebAssembly.instantiateStreaming) {
        // polyfill
        WebAssembly.instantiateStreaming = async (resp, importObject) => {
            const source = await (await resp).arrayBuffer();
            return await WebAssembly.instantiate(source, importObject);
        };
    }

    const go = new Go();

    let mod, inst;

    WebAssembly.instantiateStreaming(fetch("lib.wasm"), go.importObject).then(
        result => {
            mod = result.module;
            inst = result.instance;
            document.getElementById("runButton").disabled = false;
        }
    );

    async function run() {
        await go.run(inst);
        inst = await WebAssembly.instantiate(mod, go.importObject); // reset instance
    }
</script>

<button onClick="run();" id="runButton" disabled>Run</button>
</body>
</html>

HTML kod je od Go autora, za instanciranje WebAssembly streama koji povezuje vaš Go kod s web stranicom.

Pokretanje web poslužitelja za pokretanje stranice

Vi ćete postaviti poslužitelj s http paket . Uvezi http paket i log paket za zapisivanje mogućih grešaka na konzolu.

 import ( 
    "log"
    "net/http"
)

Možete deklarirati varijable za adresu poslužitelja i direktorij datoteka koje želite poslužiti na adresi.

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

Možete koristiti FileServer metoda http paket za posluživanje datoteka u određenom direktoriju. The FileServer metoda preuzima direktorij i vraća instancu poslužitelja datoteka.

 func main() { 
    serveFiles := http.FileServer(http.Dir(directory))
    if err := http.ListenAndServe(serverAddr, serveFiles); err != nil {
        log.Fatalln(err)
}
}

u glavni funkciju, deklarirali ste varijablu instance poslužitelja datoteka za posluživanje datoteka u korijenskom direktoriju. The Slušajte i služite metoda poslužuje datoteke u navedenom direktoriju na navedenom priključku.

  rezultat učitavanja WASM-a u pregledniku

Funkcije WebAssembly u Go

Go pruža funkcionalnost za pozivanje JS funkcija i interakciju s DOM-om u syscall/js paket.

The js paket pruža pristup WebAssembly host okruženjima na js/wasm arhitektura. Trebat ćete postaviti svoje razvojno okruženje na GOARCH=wasm GOOS=js za pristup i korištenje paketa.

  js paket dokument pregled

Možete koristiti različite metode u paketu za interakciju sa svojom web stranicom. Evo kako možete registrirati funkcije s js paket.

 // function definition 
func print(this js.Value, i []js.Value) interface{} {
    return js.ValueOf(i[:])
}

The ispisati funkcija pri registraciji kao funkcija povratnog poziva ispisat će podatke proslijeđene funkciji u konzoli preglednika.

Funkcije povratnog poziva možete registrirati pomoću set metoda Globalno metoda js paket. The set metoda uzima identifikator funkcije i instancu funkcije povratnog poziva.

 func RegisterCallbackFunctions() { 
    js.Global().Set("print", js.FuncOf(print))
}

The RegisterCallbackFunctions metoda registrira ispisati funkcionirati kao funkcija povratnog poziva koju možete koristiti u konzoli preglednika.

WebAssembly je eksperimentalna značajka na mnogim jezicima, uključujući Go

WebAssembly značajke su relativno nove za mnoge jezike, pogotovo jer je jezik nedavno postao W3C standard. The js paket je eksperimentalni i paket je izuzet od obećanja Go kompatibilnosti.