WebAssembly - Работа с Go
Здравствуйте, будущие супергерои кодирования! Сегодня мы отправимся в увлекательное путешествие в мир WebAssembly, используя Go. Не волнуйтесь, если эти термины пока что кажутся вам инопланетными - к концу этого учебника вы будете свободно говорить на них!
Что такое WebAssembly?
Прежде чем погружаться в код, давайте поймем, что такое WebAssembly. Представьте, что у вас есть超级 быстрый гоночный автомобиль (это WebAssembly), который может ездить по любому треку (веб-браузерам) с невероятной скоростью. Это способ запускать программы, написанные на языках, таких как Go, C++ или Rust, непосредственно в веб-браузерах, делая веб-приложения быстрее и мощнее.
Why Go с WebAssembly?
Go, наш выбор языка на сегодня, как швейцарский армейский нож в мире программирования. Он прост, эффективен и теперь может работать в веб-браузерах благодаря WebAssembly. Это как дать суперсилы вашим веб-приложениям!
Настройка нашей среды Go
Сначала нам нужно настроить нашу среду Go. Это как подготовка кухни перед началом приготовления вкусного блюда.
- Установите Go с официального сайта (https://golang.org/)
- Настройте GOPATH (Go будет hướngовать вас через это в процессе установки)
- Установите текстовый редактор (я рекомендую Visual Studio Code, но используйте тот, с которым вам��фортно)
Наш первый Go WebAssembly Программа
Давайте начнем с простой программы "Hello, WebAssembly!". Не волнуйтесь, если вы пока не понимаете все - мы разберем это шаг за шагом.
package main
import (
"fmt"
"syscall/js"
)
func main() {
fmt.Println("Hello, WebAssembly!")
js.Global().Set("greet", js.FuncOf(greet))
<-make(chan bool)
}
func greet(this js.Value, args []js.Value) interface{} {
name := args[0].String()
message := fmt.Sprintf("Hello, %s! Welcome to WebAssembly.", name)
js.Global().Get("document").Call("getElementById", "greeting").Set("innerText", message)
return nil
}
Давайте разберем это:
-
package main
: Это говорит Go, что это главный пакет нашей программы. -
import
: Мы импортируем два пакета -fmt
для вывода иsyscall/js
для взаимодействия с JavaScript. -
func main()
: Это точка входа нашей программы. -
js.Global().Set("greet", js.FuncOf(greet))
: Это делает нашу функциюgreet
доступной для JavaScript. -
<-make(chan bool)
: Это держит нашу программу работающей, ожидая вызовы JavaScript. -
func greet
: Эта функция принимает имя и обновляет HTML элемент с приветствием.
Компиляция нашей Go программы в WebAssembly
Теперь давайте превратим наш код Go в WebAssembly. Откройте ваш терминал и выполните:
GOOS=js GOARCH=wasm go build -o main.wasm
Эта команда говорит Go скомпилировать нашу программу для JavaScript (GOOS=js) и WebAssembly (GOARCH=wasm).
Создание HTML страницы для запуска нашего WebAssembly
Нам нужна HTML страница для загрузки и запуска нашего WebAssembly. Вот простая страница:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Go WebAssembly</title>
</head>
<body>
<h1>Go WebAssembly Demo</h1>
<input id="name" type="text" placeholder="Enter your name">
<button onclick="greet(document.getElementById('name').value)">Greet</button>
<p id="greeting"></p>
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
</script>
</body>
</html>
Эта HTML страница:
- Создает поле ввода для имени
- Имеет кнопку, которая вызывает нашу функцию
greet
- Загружаетruntime WebAssembly (
wasm_exec.js
) - Загружает и запускает наш файл WebAssembly (
main.wasm
)
Запуск нашего WebAssembly приложения
Чтобы запустить это, нам нужен веб-сервер. Вот простая команда Python для запуска:
python -m http.server
Теперь откройте ваш браузер и перейдите на http://localhost:8000
. Вы должны увидеть нашу страницу!
Понимание вывода
Когда вы вводите свое имя и нажимаете "Greet", вы увидите персонализированное приветствие. Это наша функция Go, работающая в браузере, благодаря WebAssembly!
Заключение
Поздравления! Вы только что создали свое первое приложение Go WebAssembly. Мы только что поцарапали поверхность, но я надеюсь, что это разжег ваше любопытство для дальнейшего исследования.
Помните, учиться программировать - это как учиться новому языку или инструменту. Это требует практики, терпения и упорства. Но с каждым шагом вы открываете новые возможности и расширяете свой творческий потенциал.
Продолжайте программировать, продолжайте исследовать и, самое главное, получайте удовольствие!
Метод | Описание |
---|---|
js.Global() |
Доступ к глобальному JavaScript объекту |
js.FuncOf() |
Преобразует Go функцию в JavaScript функцию |
js.Value |
Представляет JavaScript значение |
Call() |
Вызывает JavaScript метод |
Set() |
Устанавливает JavaScript свойство |
Get() |
Получает JavaScript свойство |
String() |
Преобразует JavaScript значение в Go строку |
Эта таблица резюмирует ключевые методы, которые мы использовали для взаимодействия между Go и JavaScript. По мере продолжения вашего пути в WebAssembly, вы найдете эти методы невероятно полезными!
Credits: Image by storyset