Я использую Go в качестве языка разработки последние 2 года, и мне всегда любопытно написать какой-нибудь интерфейс с использованием Go. Но какое-то время не везло, пока не вышел go 1.11.1 с экспериментальным портом WebAssembly. Итак, у меня были свои небольшие эксперименты с ним.
Я разработал два экспериментальных приложения:
https://rajnikant12345.github.io/resume/
https://rajnikant12345.github.io/wasmapp/
Какие?
Приложение wasmapp извлекает данные из REST API https://jsonplaceholder.typicode.com/users и отображает роботов, используя эти данные, и есть окно поиска, которое ищет роботов в приложении. Это приложение разработано с использованием Go и WebAssembly и пока работает на десктопе. Go необходимо оптимизировать некоторые начальные проблемы с памятью, чтобы он работал в браузере мобильного телефона.
Почему ?
Я хотел изучить некоторые технологии внешнего интерфейса, такие как react или angular, но не смог убедить себя, потому что я потерял контроль над своим кодом и отдал его каркас. Итак, я искал способ сделать это по-своему. Методы Go и WASM еще незрелые, но я чувствую, что это будущее, и стоит потратить немного времени и энергии.
Как ?
Хватит говорить, давайте сделаем это сейчас, я объясню, как я подошел к моему wasmap, тогда вы сможете легко понять мое приложение для резюме.
Предпосылка
- Я использовал GO 1.11.3, но все, что выше 1.11.1, должно работать.
- Редактор кода и все.
Я использовал немного HTML и немного CSS для веб-страницы и стилей, но код HTML написан внутри моих файлов go в виде простой текстовой строки или объектов dom.
Я использовал https://tachyons.io/ в качестве инструментария CSS.
Объяснение HTML-кода
index.html Это только код HTML, который мы увидим.
в этом файле мы извлекаем «main.wasm» и вызываем go.run(result.instance), это имеет смысл в wasm_exec.jsфайл. wasm_exec.js можно найти в папке GOROOT/misc/wasm. Этот файл на самом деле действует как связующее звено между webassembly и javascript, просто попробуйте его прочитать, и вы все поймете.
В текущей веб-сборке мы не можем получить доступ к объектам DOM, но с помощью wasm_exec.js и системного вызова GO/js в нашем коде GO, пакете мы можем получить доступ к объектам DOM и управлять ими. Мы увидим пример того, как я это делаю.
Я разработал небольшую оболочку для облегчения манипуляций с DOM, есть доступные оболочки, но иногда мне нравится делать это по-своему.
Я использую этот движок для манипулирования и рендеринга dom, я пытаюсь сделать это так же, как реагировать, но я делаю это в GO.
Код приложения GO
Я создал это приложение как компонент внутри стиля компонента, и каждый я создал такие компоненты, как полоса прокрутки, список карт, карта, приложение. Итак, иерархия похожа на
Самым верхним компонентом является приложение или приложение, затем у него есть два подкомпонента: поле поиска и полоса прокрутки.
В полосе прокрутки есть список карточек, а в списке карточек есть карточки.
Когда кто-то вводит в поле поиска, карточки, не содержащие текста в его имени, исчезают. Как показано на гифке выше.
С полем поиска связано действие, и все, включая действие и компоненты, написано на Go.
Давайте посмотрим на код
Взгляните на комментарии к коду, и это прояснит большую часть вещей.
main.go
Мы продолжим блокировать канал c, потому что мы не хотим, чтобы наша сборка завершалась, пока мы обрабатываем события, и хотим, чтобы наше приложение работало, пока мы не закроем браузер.
========================================
приложение / app.go
========================================
приложение/robos.go
========================================
приложение/scroll.go
========================================
приложение/cardlist.go
========================================
приложение/card.go
Теперь окно поиска и активный компонент этого приложения.
приложение/searchbox.go
На этом мой первый эксперимент с приложением wasm завершается. Я добился следующего:
- Получение данных JSON из сети.
- Управление компонентами приложения на ходу.
- Все это достигается с помощью GO, WebAssembly и syscall/js.
- Создал свою собственную оболочку DOM.
Надеемся, что Go и WebAssembly со временем улучшатся, поэтому мы сможем разрабатывать или создавать полный стек на одном языке.
Спасибо за чтение…