WebAssembly es una de las tecnologías modernas diseñadas para ejecutar más idiomas en el navegador con interoperabilidad de Javascript.
WebAssembly (WASM) es un formato de instrucción binaria independiente de la plataforma para máquinas virtuales basadas en pilas diseñadas como un objetivo de compilación portátil para que los lenguajes de programación se ejecuten en entornos propicios (es decir, la web y el servidor aplicaciones).
Con WASM, puede ejecutar varios lenguajes de programación, incluido Go, en su navegador y aprovechar las funciones del lenguaje. Además, interactúe con Javascript en la web.
Primeros pasos con WebAssembly en Go
Go brinda soporte de primera clase para usar WebAssembly en sus aplicaciones Go, solo necesita realizar algunas configuraciones y compilar el código Go en WebAssembly.
Deberá realizar algunas configuraciones para transpilar su código Go en WebAssembly. Tendrás que cambiar tu arquitectura Go
GOARCH variable de entorno a era m y vaya sistema operativo GOOS variable a js.Ejecute este comando en la terminal de su directorio de trabajo para realizar estas configuraciones.
Establezca GOARCH = wasm GOOS = js
El siguiente paso es transpilar su código Go en un WebAssembly .era m archivo. Ejecute este comando para transpilar su principal.ir archivo a un archivo llamado lib.wasm
ir a compilar -o lib.wasm main.go
Al ejecutar el comando, encontrará un lib.wasm en su directorio de trabajo.
Debe copiar el archivo WebAssembly que acompaña a su instalación de Go en su directorio de trabajo para ejecutar el archivo WebAssembly con NodeJS en una página web.
c.p. "$(ir al entorno GOROOT)/misc/wasm/wasm_exec.js" .
El comando copia el wasm_exec.js archivo a su directorio de trabajo y sirve como punto de entrada a su aplicación.
Ahora puede utilizar el wasm_exec.js script para ejecutar sus archivos WASM con Go and make API DOM llamadas
nodo wasm_exec.js main.wasm
Inicio de un servidor web para alojar el sitio web
Agregue este código de los autores de Go a un archivo HTML en su directorio de trabajo para instanciar un flujo de datos de WebAssembly con el instanciarStreaming método.
Copyright 2018 Los autores de Go. Todos los derechos reservados.
El uso de este código fuente se rige por una licencia de estilo BSD
que se puede encontrar en el archivo LICENSE.
"utf-8" />Vete
El código HTML es de Go Authors, para instanciar un flujo WebAssembly que conecta su código Go a la página web.
Inicio de un servidor web para ejecutar la página
lo harás configurar el servidor con el http paquete. Importar el http paquete y el registro paquete para registrar posibles errores en la consola.
importar (
"registro"
"red/http"
)
Puede declarar variables para la dirección del servidor y el directorio de los archivos que desea servir en la dirección.
variable (
direcciónservidor = ":8080"
directorio = "."
)
Puedes usar el Servidor de archivos metodo de la http paquete para servir archivos en un directorio especificado. El Servidor de archivos El método toma el directorio y devuelve una instancia de servidor de archivos.
funciónprincipal() {
servir archivos := http. servidor de archivos (http. Dir (directorio))
si error := http. ListenAndServe (dirección del servidor, archivos de servicio); error! = nulo {
registro. fatal (err)
}
}
En el principal función, declaró una variable de instancia de servidor de archivos para servir los archivos en el directorio raíz. El escucharyservir El método sirve los archivos en el directorio especificado en el puerto especificado.
Funciones WebAssembly en Go
Go proporciona funcionalidad para llamar a funciones JS e interactuar con el DOM en el llamada al sistema/js paquete.
El js El paquete proporciona acceso a los entornos de host de WebAssembly en el js/wasm arquitectura. Deberá tener su entorno de desarrollo configurado para el GOARCH=wasm GOOS=js para acceder y utilizar el paquete.
Puede utilizar los diversos métodos del paquete para interactuar con su página web. Así es como puede registrar funciones con el js paquete.
// definición de función
funciónimprimir(este js. Valor, i []js. Valor)interfaz{} {
devolver js. valor de (i[:])
}
El imprimir La función al registrarse como una función de devolución de llamada generará los datos pasados a la función en la consola del navegador.
Puede registrar funciones de devolución de llamada con el Colocar metodo de la Global metodo de la js paquete. El Colocar El método toma el identificador de función y una instancia de función de devolución de llamada.
funciónFunciones de registro de devolución de llamada() {
js. Global().Establecer("imprimir", js. FuncOf(imprimir))
}
El Funciones de registro de devolución de llamada El método registra el imprimir funcionan como una función de devolución de llamada que puede usar en la consola del navegador.
WebAssembly es una función experimental en muchos idiomas, incluido Go
Las características de WebAssembly son relativamente nuevas para muchos idiomas, especialmente desde que el idioma se convirtió recientemente en un estándar W3C. El js El paquete es experimental y está exento de la promesa de compatibilidad con Go.