WebAssembly е една от модерните технологии, предназначени за изпълнение на повече езици в браузъра с оперативна съвместимост на Javascript.
WebAssembly (WASM) е независим от платформата двоичен формат на инструкции за базирани на стек виртуални машини, проектирани като преносима цел за компилация за езици за програмиране, които да работят в благоприятни среди (т.е. уеб и сървър приложения).
С WASM можете да стартирате няколко езика за програмиране, включително Go, във вашия браузър и да използвате функциите на езика. Освен това взаимодействайте с Javascript в мрежата.
Първи стъпки с WebAssembly в Go
Go предоставя първокласна поддръжка за използване на WebAssembly във вашите Go приложения, трябва само да направите няколко конфигурации и да компилирате Go код в WebAssembly.
Ще трябва да направите няколко конфигурации, за да транспилирате вашия Go код в WebAssembly. Ще трябва да промените архитектурата на Go
GOARCH променлива на средата към wasm и операционна система Go GOOS променлива към js.Изпълнете тази команда в терминала на вашата работна директория, за да направите тези конфигурации.
Задайте GOARCH=wasm GOOS=js
Следващата стъпка е да транспилирате вашия Go код в WebAssembly .wasm файл. Изпълнете тази команда, за да транспилирате вашите main.go файл към файл с име lib.wasm
отидете build -o lib.wasm main.go
При изпълнение на командата ще намерите a lib.wasm във вашата работна директория.
Трябва да копирате файла WebAssembly, придружаващ вашата инсталация Go във вашата работна директория, за да изпълните файла WebAssembly с NodeJS на уеб страница.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Командата копира wasm_exec.js файл във вашата работна директория и служи като входна точка към вашето приложение.
Вече можете да използвате wasm_exec.js скрипт за изпълнение на вашите WASM файлове с Go and make DOM API обаждания.
възел wasm_exec.js main.wasm
Стартиране на уеб сървър за хостване на уебсайта
Добавете този код от авторите на Go към HTML файл във вашата работна директория, за да създадете поток от данни на WebAssembly с instantiateStreaming метод.
Авторско право 2018 The Go Authors. Всички права запазени.
Използването на този изходен код се управлява от
лиценз в стил BSD, който може да бъде намерен във файла LICENSE.
"utf-8" />Отиди wasm
HTML кодът е от авторите на Go за инстанциране на поток на WebAssembly, който свързва вашия Go код с уеб страницата.
Стартиране на уеб сървър за стартиране на страницата
Вие ще настройте сървъра с http пакет. Импортирайте http пакет и дневник пакет за регистриране на възможни грешки в конзолата.
импортиране (
"дневник"
"net/http"
)
Можете да декларирате променливи за адреса на сървъра и директорията на файловете, които искате да обслужвате на адреса.
вар (
serverAddr = ":8080"
директория = "."
)
Можете да използвате Файлов сървър метод на http пакет за обслужване на файлове в определена директория. The Файлов сървър методът приема директорията и връща екземпляр на файлов сървър.
функосновен() {
serveFiles := http. Файлов сървър (http. Dir (директория))
ако грешка := http. ListenAndServe (serverAddr, serveFiles); грешка!= нула {
дневник. Fatalln (грешка)
}
}
В основен функция, вие сте декларирали променлива на екземпляр на файлов сървър за обслужване на файловете в главната директория. The ListenAndServe метод обслужва файловете в посочената директория на посочения порт.
Функции на WebAssembly в Go
Go предоставя функционалност за извикване на JS функции и взаимодействие с DOM в syscall/js пакет.
The js пакетът осигурява достъп до хост средите на WebAssembly на js/wasm архитектура. Ще трябва да настроите вашата среда за разработка на GOARCH=wasm GOOS=js за достъп и използване на пакета.
Можете да използвате различните методи в пакета, за да взаимодействате с вашата уеб страница. Ето как можете да регистрирате функции с js пакет.
// дефиниция на функция
функпечат(това js. Стойност, i []js. Стойност)интерфейс{} {
връщане js. Стойност на (i[:])
}
The печат функция при регистрация като функция за обратно извикване ще изведе данните, предадени на функцията в конзолата на браузъра.
Можете да регистрирате функции за обратно повикване с Комплект метод на Глобален метод на js пакет. The Комплект методът приема идентификатора на функцията и екземпляр на функция за обратно извикване.
функRegisterCallbackFunctions() {
js. Global().Set("печат", js. FuncOf(печат))
}
The RegisterCallbackFunctions метод регистрира печат функция като функция за обратно извикване, която можете да използвате в конзолата на браузъра.
WebAssembly е експериментална функция на много езици, включително Go
Функциите на WebAssembly са сравнително нови за много езици, особено след като езикът наскоро стана стандарт на W3C. The js пакетът е експериментален и пакетът е освободен от обещанието за съвместимост с Go.