WebAssembly est l'une des technologies modernes conçues pour exécuter plus de langues sur le navigateur avec l'interopérabilité Javascript.
WebAssembly (WASM) est un format d'instruction binaire indépendant de la plate-forme pour les machines virtuelles basées sur la pile conçues comme une cible de compilation portable pour les langages de programmation à exécuter sur des environnements propices (c'est-à-dire le Web et le serveur applications).
Avec WASM, vous pouvez exécuter plusieurs langages de programmation, y compris Go, sur votre navigateur et exploiter les fonctionnalités du langage. Interagissez également avec Javascript sur le Web.
Premiers pas avec WebAssembly dans Go
Go fournit un support de première classe pour l'utilisation de WebAssembly dans vos applications Go, il vous suffit de faire quelques configurations et de compiler le code Go dans WebAssembly.
Vous devrez faire quelques configurations pour transpiler votre code Go dans WebAssembly. Vous devrez changer votre architecture Go GOARCH variable d'environnement à était M and Go système d'exploitation GOOS variable à js.
Exécutez cette commande dans le terminal de votre répertoire de travail pour effectuer ces configurations.
Définir GOARCH=wasm GOOS=js
La prochaine étape consiste à transpiler votre code Go dans un WebAssembly .était M déposer. Exécutez cette commande pour transpiler votre main.go fichier vers un fichier nommé lib.wasm
go build -o lib.wasm main.go
En exécutant la commande, vous trouverez un lib.wasm dans votre répertoire de travail.
Vous devez copier le fichier WebAssembly accompagnant votre installation Go dans votre répertoire de travail pour exécuter le fichier WebAssembly avec NodeJS sur une page Web.
CP "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
La commande copie le wasm_exec.js fichier dans votre répertoire de travail et sert de point d'entrée à votre application.
Vous pouvez maintenant utiliser le wasm_exec.js script pour exécuter vos fichiers WASM avec Go et make API DOM appels.
nœud wasm_exec.js main.wasm
Démarrage d'un serveur Web pour héberger le site Web
Ajoutez ce code des auteurs Go à un fichier HTML dans votre répertoire de travail pour instancier un flux de données WebAssembly avec le instantiateStreaming méthode.
Copyright 2018 Les auteurs Go. Tous droits réservés.
L'utilisation de ce code source est régie par une
licence de type BSD qui se trouve dans le fichier LICENSE.
"utf-8" />Allez-y
Le code HTML provient des auteurs Go, pour instancier un flux WebAssembly qui connecte votre code Go à la page Web.
Démarrage d'un serveur Web pour exécuter la page
Vous allez configurer le serveur avec le http emballer. Importez le http paquet et le enregistrer package pour consigner les éventuelles erreurs dans la console.
importer (
"enregistrer"
"net/http"
)
Vous pouvez déclarer des variables pour l'adresse du serveur et le répertoire des fichiers que vous souhaitez servir sur l'adresse.
var (
addrserveur = ":8080"
répertoire = "."
)
Vous pouvez utiliser le Serveur de fichiers méthode de la http package pour servir les fichiers dans un répertoire spécifié. Le Serveur de fichiers prend dans le répertoire et renvoie une instance de serveur de fichiers.
fonctionprincipal() {
serveFiles := http. Serveur de fichiers (http. Dir (répertoire))
si euh := http. ListenAndServe (serverAddr, serveFiles); erreur != néant {
enregistrer. Fataln (erreur)
}
}
Dans le principal fonction, vous avez déclaré une variable d'instance de serveur de fichiers pour servir les fichiers dans le répertoire racine. Le ÉcouterEtServir La méthode sert les fichiers dans le répertoire spécifié sur le port spécifié.
Fonctions WebAssembly dans Go
Go fournit des fonctionnalités pour appeler des fonctions JS et interagir avec le DOM dans le appel système/js emballer.
Le js fournit un accès aux environnements hôtes WebAssembly sur le js/wasm architecture. Votre environnement de développement doit être configuré pour GOARCH=wasmGOOS=js pour accéder et utiliser le package.
Vous pouvez utiliser les différentes méthodes du package pour interagir avec votre page Web. Voici comment vous pouvez enregistrer des fonctions avec le js emballer.
// définition de la fonction
fonctionimprimer(ceci js. Valeur, je []js. Valeur)interface{} {
retour js. ValeurDe (i[:])
}
Le imprimer fonction lors de l'enregistrement en tant que fonction de rappel affichera les données transmises à la fonction dans la console du navigateur.
Vous pouvez enregistrer des fonctions de rappel avec le Ensemble méthode de la Mondial méthode de la js emballer. Le Ensemble La méthode prend l'identifiant de la fonction et une instance de fonction de rappel.
fonctionRegisterCallbackFunctions() {
js. Global().Set("imprimer", js. FonctionDe(imprimer))
}
Le RegisterCallbackFunctions méthode enregistre le imprimer fonctionnent comme une fonction de rappel que vous pouvez utiliser dans la console du navigateur.
WebAssembly est une fonctionnalité expérimentale dans de nombreux langages, y compris Go
Les fonctionnalités de WebAssembly sont relativement nouvelles dans de nombreux langages, en particulier depuis que le langage est récemment devenu un standard du W3C. Le js package est expérimental et le package est exempté de la promesse de compatibilité Go.