Ievads WebAssembly programmā Go

Ievads WebAssembly programmā Go
Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

WebAssembly ir viena no modernajām tehnoloģijām, kas paredzēta vairāku valodu palaišanai pārlūkprogrammā ar Javascript savietojamību.





WebAssembly (WASM) ir no platformas neatkarīgs, binārs instrukciju formāts uz steku balstītām virtuālajām mašīnām, kas paredzēts kā pārnēsājams kompilācijas mērķis programmēšanas valodām, lai tās darbotos iespējojošās vidēs (t.i., tīmekļa un servera lietotnēs).





Izmantojot WASM, pārlūkprogrammā varat palaist vairākas programmēšanas valodas, tostarp Go, un izmantot šīs valodas funkcijas. Tāpat sadarbojieties ar Javascript tīmeklī.





kā paātrināt spēļu klēpjdatoru

Darba sākšana ar WebAssembly programmā Go

Go nodrošina pirmšķirīgu atbalstu WebAssembly lietošanai jūsu Go lietojumprogrammās, jums ir jāveic tikai dažas konfigurācijas un jāapkopo Go kods WebAssembly.

Jums būs jāveic dažas konfigurācijas, lai pārsūtītu savu Go kodu WebAssembly. Jums būs jāmaina sava Go arhitektūra GOARCH vides mainīgais uz wasm un Go operētājsistēmu GOOS mainīgs uz js .



Palaidiet šo komandu sava darba direktorija terminālī, lai veiktu šīs konfigurācijas.

 Set GOARCH=wasm GOOS=js  

Nākamais solis ir pārsūtīt Go kodu WebAssembly .wasm failu. Palaidiet šo komandu, lai pārsūtītu savu galvenais.go failu uz failu ar nosaukumu lib.wasm





 go build -o lib.wasm main.go 

Palaižot komandu, jūs atradīsit a lib.wasm savā darba direktorijā.

Lai tīmekļa lapā izpildītu WebAssembly failu ar NodeJS, jums ir jākopē Go instalācijai pievienotais WebAssembly fails savā darba direktorijā.





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

Komanda kopē wasm_exec.js failu savā darba direktorijā un kalpo kā ieejas punkts jūsu lietojumprogrammai.

Tagad varat izmantot wasm_exec.js skripts, lai izpildītu savus WASM failus, izmantojot Go and make DOM API zvani.

 node wasm_exec.js main.wasm 

Tīmekļa servera palaišana vietnes mitināšanai

Pievienojiet šo kodu no Go autoriem HTML failam savā darba direktorijā, lai izveidotu WebAssembly datu straumi ar instantiateStreaming metodi.

 <!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 kods ir no Go Authors, lai izveidotu WebAssembly straumi, kas savieno jūsu Go kodu ar tīmekļa lapu.

Web servera palaišana lapas palaišanai

Jūs to darīsit iestatiet serveri ar http iepakojums . Importēt http iepakojums un žurnāls pakotne iespējamo kļūdu reģistrēšanai konsolē.

uzdevumjosla tiek parādīta pilnekrāna logos 10
 import ( 
    "log"
    "net/http"
)

Varat deklarēt mainīgos lielumus servera adresei un to failu direktorijai, kurus vēlaties apkalpot šajā adresē.

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

Jūs varat izmantot Failu serveris metode http pakotni, lai apkalpotu failus noteiktā direktorijā. The Failu serveris metode aizņem direktoriju un atgriež failu servera gadījumu.

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

Iekš galvenais funkciju, jūs deklarējāt failu servera instances mainīgo, lai apkalpotu failus saknes direktorijā. The Klausieties un kalpojiet metode apkalpo failus norādītajā direktorijā norādītajā portā.

  WASM ielādes rezultāts pārlūkprogrammā

WebAssembly funkcijas Go

Go nodrošina funkcionalitāti JS funkciju izsaukšanai un mijiedarbībai ar DOM syscall/js iepakojums.

The js pakotne nodrošina piekļuvi WebAssembly resursdatora vidēm uz js/wasm arhitektūra. Jums būs jāiestata izstrādes vide atbilstoši GOARCH=wasm GOOS=js lai piekļūtu pakotnei un to izmantotu.

diemžēl google play pārstāja darboties
  js pakotnes doc priekšskatījums

Varat izmantot dažādas pakotnē esošās metodes, lai mijiedarbotos ar savu tīmekļa lapu. Lūk, kā varat reģistrēt funkcijas ar js iepakojums.

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

The drukāt funkcija reģistrācijai kā atzvanīšanas funkcija izvadīs pārlūkprogrammas konsoles funkcijai nodotos datus.

Varat reģistrēt atzvanīšanas funkcijas, izmantojot Iestatīt metode Globāli metode js iepakojums. The Iestatīt metode ņem funkcijas identifikatoru un atzvanīšanas funkcijas gadījumu.

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

The ReģistrētAtzvanīšanas funkcijas metode reģistrē drukāt darbojas kā atzvanīšanas funkcija, ko varat izmantot pārlūkprogrammas konsolē.

WebAssembly ir eksperimentāla funkcija daudzās valodās, tostarp Go

WebAssembly līdzekļi ir salīdzinoši jauni daudzās valodās, jo īpaši tāpēc, ka valoda nesen kļuva par W3C standartu. The js pakotne ir eksperimentāla, un pakotne ir atbrīvota no Go saderības solījuma.