Go - это язык программирования с открытым исходным кодом, который упрощает создание простого, надежного и эффективного программного обеспечения.

Зачем мне учить еще один язык, что такого захватывающего в го?

  • Простой и легкий синтаксис
  • Параллелизм
  • Программировать на Go - удовольствие
  • Легкая работа в сети
  • ~ Быстро

и больше"

Возвращаясь к нашему следующему герою этой истории, WebAssembly.

WebAssembly простым языком запускает ваш собственный код (C / C ++ / Rust / Go) в браузере. Это быстро, безопасно и легко обслуживается.

Они представляют собой набор двоичных инструкций, которые работают на любом стековом компьютере.

Производители браузеров предприняли несколько попыток запустить собственный код в браузере. Единственная вещь, которая была широко популярна, - это asm.js. Но и у него было много ограничений.

WebAssembly - это инструкции с двоичной кодировкой, которые эффективны по размеру и времени загрузки. Они безопасны и работают в изолированной среде.

Подождите, это не Javascript быстро. Да, вы можете добиться ~ собственной скорости в Javascript. Но объем работы и количество усилий, которые вы должны потратить, высоки. Но с WebAssembly вы можете получить это прямо из коробки.

Поддерживаемая производительность - ключ к успеху.

Давайте начнем с Go и WebAssembly.

Для начала вам необходимо установить последнюю версию Go. Если вы уже установили go, установите последнюю версию v1.11, запустив:

go get golang.org/dl/go1.11rc1

Затем вы можете запустить команду go1.11rc1 в своем терминале вместо команды go.

Пришло время скачать исходный код.

go1.11rc1 download

🏁 Шаг 1 завершен. Вы установили последнюю версию.

Если у вас еще не установлен Go, перейдите здесь, чтобы получить более подробные инструкции.

А теперь приступим к образцу helloworld.

Давайте создадим наш go файл,

mkdir go-awsm-with-wasm

cd go-awsm-with-wasm

touch main.go

Откройте его в своем любимом редакторе кода и начните печатать.

package main
import "fmt"
func main() {
    fmt.Println("Hello World!")
}

WebAssembly в настоящее время поддерживает только numbers, но нам нужно передавать и возвращать строки и другие типы объектов. Кто просто играет с числами. Поэтому нам нужны файлы привязки, которые помогают переводить вещи, которые мы отправляем из WASM в JavaScript, и из JavaScript в WASM. Итак, нам нужны файлы привязки. У Go src есть файл привязки, давайте его возьмем.





Итак, у нас есть wasm_exec.html и wasm_exec.js файл (также известный как файл привязки).

🏁 Шаг 2 завершен, все необходимое есть.

Пришло время сгенерировать файл WASM из файла Go.

Давайте работать

GOARCH=wasm GOOS=js go1.11rc1 build -o test.wasm main.go

Итак, что мы здесь делаем,

Мы сообщаем компилятору GO,

архитектура для рассмотрения: wasm с GOARCH

ОС, на которую мы нацелены: js

построить мой main.go и вывести test.wasm

🎉 Ура, у тебя получилось.

🏁 Шаг 3 завершен, наш wasm готов.

Теперь последний шаг. Запускаем и смотрю на выходе.

Есть несколько способов сделать это,

Вариант 1. Простой способ

Если у вас установлен Python, вы можете запустить

python -m SimpleHTTPServer 8000

Затем вы можете перейти на http: // localhost: 8000

Вариант 2: путь суслика

Если вы являетесь серийным сусликом, вы можете создать сервер и использовать его вместо него.

touch server.go

package main
import "net/http"
func addMIMEToWasmFiles(w http.ResponseWriter, r *http.Request) {
      w.Header().Set("Content-Type", "application/wasm")
      http.ServeFile(w, r, "test.wasm")
}
func main() {
    mux := http.NewServeMux()
    mux.Handle("/", http.FileServer(http.Dir(".")))
    
    // WASM files need MIME type to be set                        
    mux.HandleFunc("/test.wasm", addMIMEToWasmFiles)
    http.ListenAndServe(":8000", mux)
}

Затем вы можете перейти на http: // localhost: 8000

Вариант 3. Путь веб-разработчика

Это мой личный фаворит, используйте Webpack

npm init --yes

npm i --save-dev webpack webpack-cli webpack-dev-server

touch webpack.config.js

И добавляем конфигурацию,

const path = require('path');

module.exports = {
    entry: "./wasm_exec.js",
   output: {
       path: path.resolve(__dirname, "dist"),
       filename: "index.js",
   },
   mode: "development",
};

Добавьте скрипты в package.json

"scripts": {
    "build": "webpack --config webpack.config.js",
    "start": "webpack-dev-server"
}

Теперь вы можете просто запустить npm run start и перейти на http: // localhost: 8000

🏁 Шаг 4 и публикация завершена

Давайте приступим к взлому WebAssembly и сделаем Интернет еще лучше.