WebAssemblyn esittely Goissa

WebAssemblyn esittely Goissa
Kaltaisesi lukijat auttavat tukemaan MUO:ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion. Lue lisää.

WebAssembly on yksi nykyaikaisista teknologioista, jotka on suunniteltu useiden kielten käyttämiseen selaimessa Javascriptin yhteentoimivuudella.





WebAssembly (WASM) on alustasta riippumaton, binäärikäskymuoto pinopohjaisille virtuaalikoneen, joka on suunniteltu kannettavaksi käännöskohde ohjelmointikielille toimimaan mahdollistavissa ympäristöissä (eli verkko- ja palvelinsovelluksissa).





WASM:n avulla voit käyttää useita ohjelmointikieliä, mukaan lukien Go, selaimessasi ja hyödyntää kielen ominaisuuksia. Toimi myös Javascriptin kanssa verkossa.





WebAssemblyn käytön aloittaminen Gossa

Go tarjoaa ensiluokkaista tukea WebAssemblyn käyttämiselle Go-sovelluksissa. Sinun tarvitsee vain tehdä muutama kokoonpano ja kääntää Go-koodi WebAssemblyksi.

Sinun on tehtävä muutamia määrityksiä, jotta voit siirtää Go-koodisi WebAssemblyyn. Sinun on vaihdettava Go-arkkitehtuuriasi GOARCH ympäristömuuttuja wasm ja Go-käyttöjärjestelmä GOOS muuttuja js .



Suorita tämä komento työhakemistosi päätteessä tehdäksesi nämä asetukset.

 Set GOARCH=wasm GOOS=js  

Seuraava vaihe on siirtää Go-koodisi WebAssemblyksi .wasm tiedosto. Suorita tämä komento siirtääksesi main.go tiedosto tiedostoon nimeltä lib.wasm





 go build -o lib.wasm main.go 

Kun suoritat komennon, löydät a lib.wasm työhakemistossasi.

Sinun on kopioitava Go-asennuksen mukana tullut WebAssembly-tiedosto työhakemistoosi, jotta WebAssembly-tiedosto voidaan suorittaa NodeJS:llä verkkosivulla.





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

Komento kopioi wasm_exec.js tiedosto työhakemistoosi ja toimii sovelluksesi sisääntulopisteenä.

Nyt voit käyttää wasm_exec.js komentosarja WASM-tiedostojen suorittamiseksi Go and make -sovelluksella DOM API puhelut.

kuinka tehdä ääriviivat tekstiä Photoshopissa
 node wasm_exec.js main.wasm 

Web-palvelimen käynnistäminen verkkosivuston isännöimiseksi

Lisää tämä Go-tekijöiden koodi HTML-tiedostoon työhakemistossasi luodaksesi WebAssembly-tietovirran instantiateStreaming menetelmä.

 <!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-koodi on peräisin Go Authorsilta WebAssembly-streamin luomiseen, joka yhdistää Go-koodisi verkkosivulle.

Web-palvelimen käynnistäminen sivun suorittamiseksi

Tulet määritä palvelin http paketti . Tuo http paketti ja Hirsi paketti mahdollisten virheiden kirjaamiseksi konsoliin.

 import ( 
    "log"
    "net/http"
)

Voit määrittää muuttujat palvelimen osoitteelle ja niiden tiedostojen hakemistolle, jotka haluat palvella osoitteessa.

miten poistan postauksen facebookista
 var ( 
    serverAddr = ":8080"
    directory = "."
)

Voit käyttää Tiedosto palvelin menetelmä http paketti palvelemaan tiedostoja tietyssä hakemistossa. The Tiedosto palvelin menetelmä ottaa hakemiston ja palauttaa tiedostopalvelimen ilmentymän.

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

Vuonna pää -funktiossa määritit tiedostopalvelimen ilmentymämuuttujan palvelemaan juurihakemiston tiedostoja. The KuunteleJaPalvele menetelmä palvelee määritetyn portin määritetyn hakemiston tiedostoja.

  seurauksena WASM:n lataamisesta selaimeen

WebAssembly Functions in Go

Go tarjoaa toimintoja JS-toimintojen kutsumiseen ja vuorovaikutukseen DOM:n kanssa syscall/js paketti.

The js paketti tarjoaa pääsyn WebAssembly-isäntäympäristöihin js/wasm arkkitehtuuri. Sinun on määritettävä kehitysympäristösi GOARCH=wasm GOOS=js päästäksesi pakettiin ja käyttämään sitä.

  js-paketin doc-esikatselu

Voit käyttää paketin eri menetelmiä vuorovaikutuksessa verkkosivusi kanssa. Näin voit rekisteröidä toimintoja js paketti.

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

The Tulosta toiminto rekisteröinnin yhteydessä takaisinsoittotoimintona tulostaa selainkonsolin toiminnolle välitetyt tiedot.

Voit rekisteröidä takaisinsoittotoimintoja Aseta menetelmä Maailmanlaajuinen menetelmä js paketti. The Aseta menetelmä ottaa funktion tunnisteen ja takaisinkutsufunktioinstanssin.

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

The RegisterCallback Functions menetelmä rekisteröi Tulosta toimii takaisinsoittotoimintona, jota voit käyttää selainkonsolissa.

WebAssembly on kokeellinen ominaisuus monilla kielillä, mukaan lukien Go

WebAssembly-ominaisuudet ovat suhteellisen uusia monille kielille, varsinkin kun kielestä tuli äskettäin W3C-standardi. The js paketti on kokeellinen, ja paketti on vapautettu Go-yhteensopivuuslupauksesta.