WebAssembly on yksi nykyaikaisista teknologioista, jotka on suunniteltu useiden kielten käyttämiseen selaimessa Javascriptin yhteentoimivuudella.
WebAssembly (WASM) on alustasta riippumaton, binäärikäskymuoto pinopohjaisille virtuaalikoneen, joka on suunniteltu kannettavaksi käännöskohde ohjelmointikielille toimimaan mahdollistavissa ympäristöissä (eli verkko- ja palvelinsovelluksissa).
WASM:n avulla voit käyttää useita ohjelmointikieliä, mukaan lukien Go, selaimessasi ja hyödyntää kielen ominaisuuksia. Toimi myös Javascriptin kanssa verkossa.
WebAssemblyn käytön aloittaminen Gossa
Go tarjoaa ensiluokkaista tukea WebAssemblyn käyttämiselle Go-sovelluksissa. Sinun tarvitsee vain tehdä muutama kokoonpano ja kääntää Go-koodi WebAssemblyksi.
Sinun on tehtävä muutamia määrityksiä, jotta voit siirtää Go-koodisi WebAssemblyyn. Sinun on vaihdettava Go-arkkitehtuuriasi GOARCH ympäristömuuttuja wasm ja Go-käyttöjärjestelmä GOOS muuttuja js .
Suorita tämä komento työhakemistosi päätteessä tehdäksesi nämä asetukset.
Set GOARCH=wasm GOOS=js
Seuraava vaihe on siirtää Go-koodisi WebAssemblyksi .wasm tiedosto. Suorita tämä komento siirtääksesi main.go tiedosto tiedostoon nimeltä lib.wasm
go build -o lib.wasm main.go
Kun suoritat komennon, löydät a lib.wasm työhakemistossasi.
Sinun on kopioitava Go-asennuksen mukana tullut WebAssembly-tiedosto työhakemistoosi, jotta WebAssembly-tiedosto voidaan suorittaa NodeJS:llä verkkosivulla.
cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
Komento kopioi wasm_exec.js tiedosto työhakemistoosi ja toimii sovelluksesi sisääntulopisteenä.
Nyt voit käyttää wasm_exec.js komentosarja WASM-tiedostojen suorittamiseksi Go and make -sovelluksella DOM API puhelut.
kuinka tehdä ääriviivat tekstiä Photoshopissa
node wasm_exec.js main.wasm
Web-palvelimen käynnistäminen verkkosivuston isännöimiseksi
Lisää tämä Go-tekijöiden koodi HTML-tiedostoon työhakemistossasi luodaksesi WebAssembly-tietovirran instantiateStreaming menetelmä.
<!DOCTYPE html>
<!--
Copyright 2018 The Go Authors. All rights reserved.
Use of this source code is governed by a BSD-style
license that can be found in the LICENSE file.
-->
<html>
<head>
<meta charset="utf-8" />
<title>Go wasm</title>
</head>
<body>
<script src="wasm_exec.js"></script>
<script>
if (!WebAssembly.instantiateStreaming) {
// polyfill
WebAssembly.instantiateStreaming = async (resp, importObject) => {
const source = await (await resp).arrayBuffer();
return await WebAssembly.instantiate(source, importObject);
};
}
const go = new Go();
let mod, inst;
WebAssembly.instantiateStreaming(fetch("lib.wasm"), go.importObject).then(
result => {
mod = result.module;
inst = result.instance;
document.getElementById("runButton").disabled = false;
}
);
async function run() {
await go.run(inst);
inst = await WebAssembly.instantiate(mod, go.importObject); // reset instance
}
</script>
<button onClick="run();" id="runButton" disabled>Run</button>
</body>
</html>
HTML-koodi on peräisin Go Authorsilta WebAssembly-streamin luomiseen, joka yhdistää Go-koodisi verkkosivulle.
Web-palvelimen käynnistäminen sivun suorittamiseksi
Tulet määritä palvelin http paketti . Tuo http paketti ja Hirsi paketti mahdollisten virheiden kirjaamiseksi konsoliin.
import (
"log"
"net/http"
)
Voit määrittää muuttujat palvelimen osoitteelle ja niiden tiedostojen hakemistolle, jotka haluat palvella osoitteessa.
miten poistan postauksen facebookista
var (
serverAddr = ":8080"
directory = "."
)
Voit käyttää Tiedosto palvelin menetelmä http paketti palvelemaan tiedostoja tietyssä hakemistossa. The Tiedosto palvelin menetelmä ottaa hakemiston ja palauttaa tiedostopalvelimen ilmentymän.
func main() {
serveFiles := http.FileServer(http.Dir(directory))
if err := http.ListenAndServe(serverAddr, serveFiles); err != nil {
log.Fatalln(err)
}
}
Vuonna pää -funktiossa määritit tiedostopalvelimen ilmentymämuuttujan palvelemaan juurihakemiston tiedostoja. The KuunteleJaPalvele menetelmä palvelee määritetyn portin määritetyn hakemiston tiedostoja.
WebAssembly Functions in Go
Go tarjoaa toimintoja JS-toimintojen kutsumiseen ja vuorovaikutukseen DOM:n kanssa syscall/js paketti.
The js paketti tarjoaa pääsyn WebAssembly-isäntäympäristöihin js/wasm arkkitehtuuri. Sinun on määritettävä kehitysympäristösi GOARCH=wasm GOOS=js päästäksesi pakettiin ja käyttämään sitä.
Voit käyttää paketin eri menetelmiä vuorovaikutuksessa verkkosivusi kanssa. Näin voit rekisteröidä toimintoja js paketti.
// function definition
func print(this js.Value, i []js.Value) interface{} {
return js.ValueOf(i[:])
}
The Tulosta toiminto rekisteröinnin yhteydessä takaisinsoittotoimintona tulostaa selainkonsolin toiminnolle välitetyt tiedot.
Voit rekisteröidä takaisinsoittotoimintoja Aseta menetelmä Maailmanlaajuinen menetelmä js paketti. The Aseta menetelmä ottaa funktion tunnisteen ja takaisinkutsufunktioinstanssin.
func RegisterCallbackFunctions() {
js.Global().Set("print", js.FuncOf(print))
}
The RegisterCallback Functions menetelmä rekisteröi Tulosta toimii takaisinsoittotoimintona, jota voit käyttää selainkonsolissa.
WebAssembly on kokeellinen ominaisuus monilla kielillä, mukaan lukien Go
WebAssembly-ominaisuudet ovat suhteellisen uusia monille kielille, varsinkin kun kielestä tuli äskettäin W3C-standardi. The js paketti on kokeellinen, ja paketti on vapautettu Go-yhteensopivuuslupauksesta.