Εισαγωγή στο WebAssembly in Go

Εισαγωγή στο WebAssembly in Go
Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Το WebAssembly είναι μια από τις σύγχρονες τεχνολογίες που έχουν σχεδιαστεί για την εκτέλεση περισσότερων γλωσσών στο πρόγραμμα περιήγησης με διαλειτουργικότητα Javascript.





Το WebAssembly (WASM) είναι μια ανεξάρτητη από πλατφόρμα, δυαδική μορφή εντολών για εικονικές μηχανές που βασίζονται σε στοίβα και έχει σχεδιαστεί ως φορητός στόχος μεταγλώττισης για γλώσσες προγραμματισμού που θα εκτελούνται σε περιβάλλοντα ενεργοποίησης (δηλαδή στον ιστό και τις εφαρμογές διακομιστή).





Με το WASM, μπορείτε να εκτελέσετε πολλές γλώσσες προγραμματισμού, συμπεριλαμβανομένης της Go, στο πρόγραμμα περιήγησής σας και να αξιοποιήσετε τις δυνατότητες της γλώσσας. Επίσης, διαλειτουργεί με Javascript στον Ιστό.





Ξεκινώντας με το WebAssembly in Go

Το Go παρέχει υποστήριξη πρώτης κατηγορίας για τη χρήση του WebAssembly στις εφαρμογές Go σας, χρειάζεται μόνο να κάνετε μερικές διαμορφώσεις και να μεταγλωττίσετε τον κώδικα Go στο WebAssembly.

Θα χρειαστεί να κάνετε μερικές διαμορφώσεις για να μεταφέρετε τον κώδικα Go σας στο WebAssembly. Θα πρέπει να αλλάξετε την αρχιτεκτονική Go GOARCH μεταβλητή περιβάλλοντος σε wasm και το λειτουργικό σύστημα Go GOOS μεταβλητή σε js .



Εκτελέστε αυτήν την εντολή στο τερματικό του καταλόγου εργασίας σας για να κάνετε αυτές τις διαμορφώσεις.

 Set GOARCH=wasm GOOS=js  

Το επόμενο βήμα είναι να μεταφέρετε τον κώδικα Go σας σε ένα WebAssembly .wasm αρχείο. Εκτελέστε αυτήν την εντολή για να μεταφράσετε το δικό σας main.go αρχείο σε ένα αρχείο με όνομα lib.wasm





 go build -o lib.wasm main.go 

Κατά την εκτέλεση της εντολής, θα βρείτε ένα lib.wasm στον κατάλογο εργασίας σας.

το αίτημα περιγραφής συσκευής απέτυχε στα παράθυρα 10

Πρέπει να αντιγράψετε το αρχείο WebAssembly που συνοδεύει την εγκατάσταση Go στον κατάλογο εργασίας σας για να εκτελέσετε το αρχείο WebAssembly με το NodeJS σε μια ιστοσελίδα.





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

Η εντολή αντιγράφει το wasm_exec.js αρχείο στον κατάλογο εργασίας σας και χρησιμεύει ως σημείο εισόδου στην αίτησή σας.

Τώρα μπορείτε να χρησιμοποιήσετε το wasm_exec.js script για να εκτελέσετε τα αρχεία WASM με το Go and make DOM API κλήσεις.

 node wasm_exec.js main.wasm 

Εκκίνηση ενός διακομιστή Web για τη φιλοξενία του ιστότοπου

Προσθέστε αυτόν τον κώδικα από τους συντάκτες Go σε ένα αρχείο HTML στον κατάλογο εργασίας σας για να δημιουργήσετε μια ροή δεδομένων WebAssembly με το instantiateStreaming μέθοδος.

 <!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 προέρχεται από τους Go Authors, για τη δημιουργία μιας ροής WebAssembly που συνδέει τον κώδικα Go σας με την ιστοσελίδα.

Το wifi λέει συνδεδεμένο αλλά όχι ίντερνετ

Εκκίνηση ενός διακομιστή Web για την εκτέλεση της σελίδας

Θα ρυθμίστε τον διακομιστή με το http πακέτο . Εισαγάγετε το http πακέτο και το κούτσουρο πακέτο για την καταγραφή πιθανών σφαλμάτων στην κονσόλα.

 import ( 
    "log"
    "net/http"
)

Μπορείτε να δηλώσετε μεταβλητές για τη διεύθυνση διακομιστή και τον κατάλογο των αρχείων που θέλετε να εμφανίσετε στη διεύθυνση.

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

Μπορείτε να χρησιμοποιήσετε το FileServer μέθοδος του http πακέτο για την προβολή αρχείων σε έναν καθορισμένο κατάλογο. ο FileServer μέθοδος παίρνει στον κατάλογο και επιστρέφει μια παρουσία διακομιστή αρχείων.

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

Στο κύριος Συνάρτηση, δηλώσατε μια μεταβλητή παρουσίας διακομιστή αρχείων για την εξυπηρέτηση των αρχείων στον ριζικό κατάλογο. ο ListenAndServe μέθοδος εξυπηρετεί τα αρχεία στον καθορισμένο κατάλογο στην καθορισμένη θύρα.

  αποτέλεσμα της φόρτωσης του WASM στο πρόγραμμα περιήγησης

Λειτουργίες WebAssembly στο Go

Το Go παρέχει λειτουργικότητα για κλήση συναρτήσεων JS και αλληλεπίδραση με το DOM στο syscall/js πακέτο.

ο js Το πακέτο παρέχει πρόσβαση σε περιβάλλοντα κεντρικού υπολογιστή WebAssembly στο js/wasm αρχιτεκτονική. Θα χρειαστεί να ρυθμίσετε το περιβάλλον ανάπτυξής σας για να GOARCH=wasm GOOS=js για πρόσβαση και χρήση του πακέτου.

  Προεπισκόπηση εγγράφου πακέτου js

Μπορείτε να χρησιμοποιήσετε τις διάφορες μεθόδους στο πακέτο για να αλληλεπιδράσετε με την ιστοσελίδα σας. Δείτε πώς μπορείτε να καταχωρίσετε συναρτήσεις με το js πακέτο.

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

ο Τυπώνω Η λειτουργία κατά την εγγραφή ως συνάρτηση επανάκλησης θα εξάγει τα δεδομένα που διαβιβάζονται στη λειτουργία στην κονσόλα του προγράμματος περιήγησης.

Μπορείτε να καταχωρίσετε λειτουργίες επανάκλησης με το Σειρά μέθοδος του Παγκόσμια μέθοδος του js πακέτο. ο Σειρά μέθοδος λαμβάνει το αναγνωριστικό συνάρτησης και ένα παράδειγμα συνάρτησης επανάκλησης.

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

ο RegisterCallbackFunctions μέθοδος καταχωρεί το Τυπώνω λειτουργεί ως λειτουργία επανάκλησης που μπορείτε να χρησιμοποιήσετε στην κονσόλα του προγράμματος περιήγησης.

πώς να περιστρέψετε βίντεο στο πρόγραμμα αναπαραγωγής πολυμέσων παραθύρου

Το WebAssembly είναι μια πειραματική λειτουργία σε πολλές γλώσσες, συμπεριλαμβανομένου του Go

Οι δυνατότητες WebAssembly είναι σχετικά νέες σε πολλές γλώσσες, ειδικά αφού η γλώσσα έγινε πρόσφατα πρότυπο του W3C. ο js Το πακέτο είναι πειραματικό και το πακέτο εξαιρείται από την υπόσχεση συμβατότητας Go.