Если вы работаете с WebAssembly и пишете на Go, раньше приходилось тянуть зависимости на C++ (
wabt) или Rust (wasm-tools). Теперь есть нативная альтернатива.Что это
watgo это либа для работы с WebAssembly на чистом Go, без внешних зависимостей. Умеет парсить текстовый формат WebAssembly, валидировать его и компилировать в бинарный WASM и декодировать WASM обратно в структурное представление.В основе лежит пакет
wasmir — семантическое представление WASM-модуля, с которым удобно работать программно.Установка:
go install github.com/eliben/watgo/cmd/watgo@latest
Скомпилировать WAT в WASM можно одной командой:
watgo parse stack.wat -o stack.wasm
Пример работы через API
Парсим WAT-модуль и анализируем инструкции:
m, err := watgo.ParseWAT([]byte(wasmText))
if err != nil {
panic(err)
}
for _, fn := range m.Funcs {
for _, instr := range fn.Body {
switch instr.Kind {
case wasmir.InstrLocalGet:
// обработка
case wasmir.InstrI32Add:
// обработка
}
}
}
Функции модуля хранятся в
m.Funcs, каждая содержит плоский список инструкций fn.Body. Имена и типы при парсинге резолвятся в числовые индексы — так же, как это устроено в бинарном формате WASM.Тестирование
Проект прошёл официальный тест-сьют WebAssembly — почти 200 тысяч строк WAT-файлов с описанием ожидаемого поведения. Бинарный вывод
watgo прогоняется через Node.js и сверяется со спецификацией.➡️ Источник | Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction