A WebAssembly az egyik olyan modern technológia, amelyet arra terveztek, hogy több nyelvet futtasson a böngészőben, Javascript együttműködési képességgel.
A WebAssembly (WASM) egy platformfüggetlen, bináris utasításformátum verem alapú virtuális gépekhez, amelyeket egy hordozható fordítási cél programozási nyelvekhez, amelyek lehetővé teszik a környezetekben (azaz a weben és a szerveren) való futtatást alkalmazások).
A WASM segítségével számos programozási nyelvet futtathat, beleértve a Go-t is, a böngészőjében, és kihasználhatja a nyelv funkcióit. Ezenkívül működjön együtt a Javascripttel a weben.
A WebAssembly használatának első lépései a Go-ban
A Go első osztályú támogatást nyújt a WebAssembly használatához a Go-alkalmazásokban, csak néhány konfigurációt kell elvégeznie, és a Go kódot kell fordítania a WebAssembly-be.
El kell végeznie néhány konfigurációt a Go kód WebAssembly programba való átültetéséhez. Meg kell változtatnia a Go architektúráját
GOARCH környezeti változóhoz wasm és Go operációs rendszer GOOS változó -ra js.A konfigurációk elvégzéséhez futtassa ezt a parancsot a munkakönyvtár termináljában.
Állítsa be: GOARCH=wasm GOOS=js
A következő lépés a Go kód átültetése egy WebAssembly-be .wasm fájlt. Futtassa ezt a parancsot a saját átültetéséhez fő.go nevű fájlba lib.wasm
go build -o lib.wasm main.go
A parancs futtatásakor megtalálja a lib.wasm a munkakönyvtárában.
A Go telepítését kísérő WebAssembly fájlt át kell másolnia a munkakönyvtárába, hogy a WebAssembly fájlt NodeJS-szel végrehajthassa egy weboldalon.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
A parancs másolja a wasm_exec.js fájlt a munkakönyvtárába, és belépési pontként szolgál az alkalmazáshoz.
Most már használhatja a wasm_exec.js szkriptet a WASM-fájlok végrehajtásához a Go and make segítségével DOM API hívásokat.
csomópont wasm_exec.js main.wasm
Webszerver indítása a webhely üzemeltetéséhez
Adja hozzá ezt a kódot a Go szerzőktől egy HTML-fájlhoz a munkakönyvtárában, hogy létrehozzon egy WebAssembly adatfolyamot a példányosítása Streaming módszer.
Szerzői jogok 2018 The Go Authors. Minden jog fenntartva.
A forráskód használatát egy BSD-stílusú
licenc szabályozza, amely a LICENSE fájlban található.
"utf-8" />Menj wasm
A HTML-kód a Go Authorstól származik, egy WebAssembly adatfolyam létrehozásához, amely összeköti a Go kódot a weboldallal.
Webszerver indítása az oldal futtatásához
fogsz állítsa be a szervert a http csomag. Importálja a http csomagot és a log csomag a lehetséges hibák naplózásához a konzolon.
import (
"napló"
"net/http"
)
Deklarálhat változókat a szerver címéhez és a címen megjeleníteni kívánt fájlok könyvtárához.
var (
szerverAddr = ":8080"
könyvtár = "."
)
Használhatja a FileServer módszere a http csomag egy megadott könyvtárban lévő fájlok kiszolgálásához. A FileServer metódus beveszi a könyvtárat, és egy fájlkiszolgáló-példányt ad vissza.
funcfő-() {
serveFiles := http. FileServer (http. Rendező (könyvtár))
ha hiba := http. ListenAndServe (serverAddr, serveFiles); hiba! = nulla {
log. Fatalln (hiba)
}
}
Ban,-ben fő- függvényt, deklarált egy fájlkiszolgáló-példányváltozót a gyökérkönyvtárban lévő fájlok kiszolgálására. A ListenAndServe metódus a megadott könyvtárban lévő fájlokat szolgálja ki a megadott porton.
WebAssembly funkciók a Go-ban
A Go funkcionalitást biztosít a JS függvények hívásához és a DOM-mal való interakcióhoz syscall/js csomag.
A js csomag hozzáférést biztosít a WebAssembly gazdagép környezeteihez a js/wasm építészet. Be kell állítania a fejlesztői környezetet a GOARCH=wasm GOOS=js a csomag eléréséhez és használatához.
A csomagban található különféle módszereket használhatja a weboldallal való interakcióhoz. Így regisztrálhat funkciókat a js csomag.
// függvénydefiníció
funcnyomtatás(ez a js. Érték, i []js. Érték)felület{} {
Visszatérés js. ValueOf (i[:])
}
A nyomtatás funkció regisztrációkor visszahívási funkcióként kiadja a böngészőkonzolon lévő funkciónak átadott adatokat.
A visszahívási funkciókat a Készlet módszere a Globális módszere a js csomag. A Készlet metódus veszi a függvényazonosítót és egy visszahívási függvénypéldányt.
funcRegisterCallbackFunctions() {
js. Global().Set("nyomtatás", js. FuncOf(nyomtatás))
}
A RegisterCallbackFunctions metódus regisztrálja a nyomtatás visszahívási funkcióként működik, amelyet a böngésző konzoljában használhat.
A WebAssembly egy kísérleti funkció számos nyelven, beleértve a Go-t is
A WebAssembly funkciói sok nyelven viszonylag újak, különösen azért, mert a nyelv nemrég W3C szabvány lett. A js csomag kísérleti jellegű, és a csomag mentesül a Go kompatibilitási ígéret alól.