„WebAssembly“ įvadas į „Go“.

„WebAssembly“ įvadas į „Go“.
Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius. Skaityti daugiau.

„WebAssembly“ yra viena iš šiuolaikinių technologijų, skirtų naudoti daugiau kalbų naršyklėje su „Javascript“ sąveika.





WebAssembly (WASM) yra nuo platformos nepriklausomas dvejetainis instrukcijų formatas, skirtas kamino virtualioms mašinoms, sukurtas kaip nešiojamasis kompiliavimo tikslas programavimo kalboms veikti įgalinančiose aplinkose (t. y. žiniatinklio ir serverio programose).





Naudodami WASM savo naršyklėje galite paleisti kelias programavimo kalbas, įskaitant Go, ir panaudoti kalbos funkcijas. Be to, sąveikaukite su „Javascript“ žiniatinklyje.



Darbo su WebAssembly in Go pradžia

„Go“ teikia aukščiausios klasės palaikymą naudojant „WebAssembly“ jūsų „Go“ programose. Jums tereikia atlikti keletą konfigūracijų ir sukompiliuoti „Go“ kodą į „WebAssembly“.

Norėdami perkelti „Go“ kodą į „WebAssembly“, turėsite atlikti keletą konfigūracijų. Turėsite pakeisti „Go“ architektūrą GOARCHAS aplinkos kintamasis į wasm ir Go operacinė sistema GOOS kintamasis į js .



sistemos atkūrimas, neveikiantis „Windows 7“

Norėdami atlikti šias konfigūracijas, paleiskite šią komandą savo darbo katalogo terminale.

 Set GOARCH=wasm GOOS=js  

Kitas žingsnis yra perkelti savo Go kodą į WebAssembly .wasm failą. Vykdykite šią komandą, kad perkeltumėte savo pagrindinis.go failą į failą pavadinimu lib.wasm





 go build -o lib.wasm main.go 

Vykdydami komandą rasite a lib.wasm savo darbo kataloge.

Turite nukopijuoti „WebAssembly“ failą, esantį kartu su „Go“ diegimu, į savo darbo katalogą, kad „WebAssembly“ failas būtų paleistas su „NodeJS“ tinklalapyje.





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

Komanda nukopijuoja wasm_exec.js failą į savo darbo katalogą ir yra jūsų programos įėjimo taškas.

Dabar galite naudoti wasm_exec.js scenarijų, kad paleistumėte WASM failus naudodami „Go and make“. DOM API skambučių.

 node wasm_exec.js main.wasm 

Web serverio paleidimas svetainei priglobti

Pridėkite šį kodą iš Go autorių į HTML failą savo darbo kataloge, kad sukurtumėte WebAssembly duomenų srautą su momentinis srautinis perdavimas metodas.

 <!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 kodas yra iš „Go Authors“, skirtas sukurti „WebAssembly“ srautą, kuris sujungia jūsų „Go“ kodą su tinklalapiu.

Žiniatinklio serverio paleidimas puslapio paleidimui

Jūs padarysite nustatykite serverį naudodami http paketą . Importuoti http paketą ir žurnalas paketas galimų klaidų registravimui konsolėje.

kaip gauti daugiau vietos „MacBook Air“
 import ( 
    "log"
    "net/http"
)

Galite deklaruoti serverio adreso ir failų, kuriuos norite pateikti šiuo adresu, katalogo kintamuosius.

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

Galite naudoti Failų serveris metodas http paketą, skirtą failams aptarnauti nurodytame kataloge. The Failų serveris metodas paima katalogą ir grąžina failų serverio egzempliorių.

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

Viduje konors pagrindinis funkciją, paskelbėte failų serverio egzempliorių kintamąjį, kuris aptarnautų failus šakniniame kataloge. The KlausykIr Tarnaukite metodas aptarnauja failus nurodytame kataloge nurodytame prievade.

  WASM įkėlimo į naršyklę rezultatas

WebAssembly funkcijos Go

„Go“ suteikia galimybę iškviesti JS funkcijas ir sąveikauti su DOM syscall/js paketą.

The js paketas suteikia prieigą prie „WebAssembly“ prieglobos aplinkų js/wasm architektūra. Kūrimo aplinka turės būti nustatyta taip GOARCH=wasm GOOS=js prieiti prie paketo ir juo naudotis.

  js paketo doc peržiūra

Norėdami sąveikauti su savo tinklalapiu, galite naudoti įvairius pakete esančius metodus. Štai kaip galite užregistruoti funkcijas su js paketą.

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

The spausdinti funkcija registruojantis kaip atgalinio skambinimo funkcija išves duomenis, perduodamus funkcijai naršyklės konsolėje.

Galite užregistruoti perskambinimo funkcijas naudodami Nustatyti metodas Pasaulinis metodas js paketą. The Nustatyti metodas paima funkcijos identifikatorių ir atšaukimo funkcijos egzempliorių.

geriausias būdas dalytis muzikos failais
 func RegisterCallbackFunctions() { 
    js.Global().Set("print", js.FuncOf(print))
}

The Registruokis atgalinio skambučio funkcijas metodas registruoja spausdinti veikia kaip atgalinio ryšio funkcija, kurią galite naudoti naršyklės konsolėje.

WebAssembly yra eksperimentinė funkcija daugeliu kalbų, įskaitant Go

WebAssembly funkcijos yra palyginti naujos daugelyje kalbų, ypač todėl, kad kalba neseniai tapo W3C standartu. The js paketas yra eksperimentinis, o paketui netaikomas „Go“ suderinamumo pažadas.