WebAssembly — это одна из современных технологий, предназначенных для запуска большего количества языков в браузере с совместимостью с Javascript.
WebAssembly (WASM) — это независимый от платформы двоичный формат инструкций для виртуальных машин на основе стека, разработанный как переносимая цель компиляции для языков программирования для работы в благоприятных средах (например, в Интернете и на сервере). Программы).
С WASM вы можете запускать несколько языков программирования, включая Go, в своем браузере и использовать возможности языка. Кроме того, взаимодействовать с Javascript в Интернете.
Начало работы с WebAssembly в Go
Go обеспечивает первоклассную поддержку использования WebAssembly в ваших приложениях Go, вам нужно всего лишь выполнить несколько конфигураций и скомпилировать код Go в WebAssembly.
Вам нужно будет сделать несколько конфигураций, чтобы перенести код Go в WebAssembly. Вам придется изменить свою архитектуру Go
ГОАРЧ переменная среды для васм и операционная система Go ГСНО переменная к js.Запустите эту команду в терминале вашего рабочего каталога, чтобы выполнить эти настройки.
Установить GOARCH=wasm GOOS=js
Следующим шагом будет преобразование вашего кода Go в WebAssembly. .wasm файл. Запустите эту команду, чтобы транспилировать ваш main.go файл в файл с именем lib.wasm
go build -o lib.wasm main.go
Запустив команду, вы найдете lib.wasm в вашем рабочем каталоге.
Вам нужно скопировать файл WebAssembly, сопровождающий вашу установку Go, в ваш рабочий каталог, чтобы выполнить файл WebAssembly с помощью NodeJS на веб-странице.
ср "$(перейти в GOROOT)/misc/wasm/wasm_exec.js" .
Команда копирует wasm_exec.js файл в ваш рабочий каталог и служит точкой входа в ваше приложение.
Теперь вы можете использовать wasm_exec.js скрипт для выполнения ваших файлов WASM с помощью Go и make DOM-API звонки.
узел wasm_exec.js main.wasm
Запуск веб-сервера для размещения веб-сайта
Добавьте этот код от авторов Go в файл HTML в вашем рабочем каталоге, чтобы создать экземпляр потока данных WebAssembly с InstantiateStreaming метод.
Авторское право 2018 Авторы Go. Все права защищены.
Использование этого исходного кода регулируется лицензией в стиле BSD
, которую можно найти в файле LICENSE.
"утф-8" />Перейти васм
HTML-код предоставлен авторами Go для создания экземпляра потока WebAssembly, который соединяет ваш код Go с веб-страницей.
Запуск веб-сервера для запуска страницы
Вы будете настроить сервер с http упаковка. Импортировать http пакет и бревно package для вывода возможных ошибок на консоль.
Импортировать (
"бревно"
"сеть/http"
)
Вы можете объявить переменные для адреса сервера и каталога файлов, которые вы хотите обслуживать по этому адресу.
вар (
адрес сервера = ":8080"
каталог = "."
)
Вы можете использовать Файловый сервер метод http package для обслуживания файлов в указанном каталоге. Файловый сервер Метод принимает каталог и возвращает экземпляр файлового сервера.
функцияосновной() {
служитьФайлы := http. Файловый сервер (http. Дир (каталог))
если ошибка := http. ListenAndServe(serverAddr, serveFiles); ошибся != ноль {
бревно. Fatalln (ошибка)
}
}
в основной вы объявили переменную экземпляра файлового сервера для обслуживания файлов в корневом каталоге. слушать и обслуживать метод обслуживает файлы в указанном каталоге на указанном порту.
Функции WebAssembly в Go
Go предоставляет функциональность для вызова функций JS и взаимодействия с DOM в системный вызов/js упаковка.
js пакет обеспечивает доступ к хост-средам WebAssembly на js/васм архитектура. Вам нужно настроить среду разработки на GOARCH=wasm GOOS=js для доступа и использования пакета.
Вы можете использовать различные методы в пакете для взаимодействия с вашей веб-страницей. Вот как вы можете зарегистрировать функции с помощью js упаковка.
// определение функции
функцияРаспечатать(это джс. Значение, i []js. Ценить)интерфейс{} {
возвращаться js. ЗначениеOf (i[:])
}
Распечатать функция при регистрации в качестве функции обратного вызова выведет данные, переданные функции, в консоль браузера.
Вы можете зарегистрировать функции обратного вызова с помощью Набор метод Глобальный метод js упаковка. Набор Метод принимает идентификатор функции и экземпляр функции обратного вызова.
функцияФункции регистрации обратного вызова() {
js. Глобальный (). Установить ("Распечатать", Дж.С. FuncOf(Распечатать))
}
Функции регистрации обратного вызова метод регистрирует Распечатать функционировать как функция обратного вызова, которую вы можете использовать в консоли браузера.
WebAssembly — экспериментальная функция во многих языках, включая Go
Возможности WebAssembly относительно новы для многих языков, тем более что этот язык недавно стал стандартом W3C. js пакет является экспериментальным, и на него не распространяется обещание совместимости с Go.