WebAssembly - Lavorare con Go
Ciao a tutti, futuri superstar del programming! Oggi ci imbarcheremo in un viaggio emozionante nel mondo di WebAssembly utilizzando Go. Non preoccupatevi se questi termini vi sembrano lingue aliene ora - alla fine di questo tutorial, li parlerete fluentemente!
Cos'è WebAssembly?
Prima di immergerci nel codice, capiremo cos'è WebAssembly. Immagina di avere una super-veloce auto da corsa (quella è WebAssembly) che può correre su qualsiasi pista (i browser web) a velocità incredibili. È un modo per eseguire programmi scritti in linguaggi come Go, C++, o Rust direttamente nei browser web, rendendo le applicazioni web più rapide e potenti.
Perché usare WebAssembly con Go?
Go, il nostro linguaggio di scelta oggi, è come un coltello svizzero nel mondo della programmazione. È semplice, efficiente e ora può funzionare nei browser web grazie a WebAssembly. È come dare superpoteri alle tue applicazioni web!
Configurare il Nostro Ambiente Go
Prima di tutto, dobbiamo configurare il nostro ambiente Go. È come preparare la nostra cucina prima di iniziare a cucinare un delizioso pasto.
- Installa Go dal sito ufficiale (https://golang.org/)
- Configura il tuo GOPATH (Go ti guiderà attraverso questo durante l'installazione)
- Installa un editor di codice (ti consiglio Visual Studio Code, ma usa quello con cui sei a tuo agio)
Il Nostro Primo Programma Go WebAssembly
Iniziamo con un semplice programma "Ciao, WebAssembly!". Non preoccuparti se non capisci tutto ancora - lo analizzeremo passo per passo.
package main
import (
"fmt"
"syscall/js"
)
func main() {
fmt.Println("Ciao, WebAssembly!")
js.Global().Set("greet", js.FuncOf(greet))
<-make(chan bool)
}
func greet(this js.Value, args []js.Value) interface{} {
name := args[0].String()
message := fmt.Sprintf("Ciao, %s! Benvenuto in WebAssembly.", name)
js.Global().Get("document").Call("getElementById", "greeting").Set("innerText", message)
return nil
}
Ecco una spiegazione:
-
package main
: Questo dice a Go che questo è il pacchetto principale del nostro programma. -
import
: Stiamo importando due pacchetti -fmt
per stampare esyscall/js
per interagire con JavaScript. -
func main()
: Questo è il punto di ingresso del nostro programma. -
js.Global().Set("greet", js.FuncOf(greet))
: Questo rende la nostra funzionegreet
disponibile per JavaScript. -
<-make(chan bool)
: Questo keeps il nostro programma in esecuzione, in attesa di chiamate JavaScript. -
func greet
: Questa funzione prende un nome e aggiorna un elemento HTML con un saluto.
Compilare Il Nostro Programma Go in WebAssembly
Ora, trasformiamo il nostro codice Go in WebAssembly. Apri il tuo terminale e esegui:
GOOS=js GOARCH=wasm go build -o main.wasm
Questo comando dice a Go di compilare il nostro programma per JavaScript (GOOS=js) e WebAssembly (GOARCH=wasm).
Creare una Pagina HTML per Eseguire il Nostro WebAssembly
Abbiamo bisogno di una pagina HTML per caricare ed eseguire il nostro WebAssembly. Ecco una semplice:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Go WebAssembly</title>
</head>
<body>
<h1>Dimostrazione Go WebAssembly</h1>
<input id="name" type="text" placeholder="Inserisci il tuo nome">
<button onclick="greet(document.getElementById('name').value)">Saluta</button>
<p id="greeting"></p>
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
</script>
</body>
</html>
Questa pagina HTML:
- Crea un campo di input per un nome
- Ha un pulsante che chiama la nostra funzione
greet
- Carica il runtime di WebAssembly (
wasm_exec.js
) - Carica ed esegue il nostro file WebAssembly (
main.wasm
)
Eseguire la Nostra Applicazione WebAssembly
Per eseguire questo, abbiamo bisogno di un server web. Ecco un semplice comando Python per avviarne uno:
python -m http.server
Ora, apri il tuo browser e vai a http://localhost:8000
. Dovresti vedere la nostra pagina!
Comprendere l'Output
Quando inserisci il tuo nome e clicchi su "Saluta", vedrai un saluto personalizzato apparire. Questo è la nostra funzione Go che viene eseguita nel browser, grazie a WebAssembly!
Conclusione
Congratulations! Hai appena creato la tua prima applicazione Go WebAssembly. Abbiamo solo sfiorato la superficie qui, ma spero che questo abbia suscitato la tua curiosità per esplorare di più.
Ricorda, imparare a programmare è come imparare una nuova lingua o uno strumento musicale. Richiede pratica, pazienza e perseveranza. Ma con ogni passo, stai sbloccando nuove possibilità e espandendo il tuo potenziale creativo.
Continua a programmare, continua a esplorare e, soprattutto, divertiti!
Metodo | Descrizione |
---|---|
js.Global() |
Accede all'oggetto JavaScript globale |
js.FuncOf() |
Converte una funzione Go in una funzione JavaScript |
js.Value |
Rappresenta un valore JavaScript |
Call() |
Chiama un metodo JavaScript |
Set() |
Imposta una proprietà JavaScript |
Get() |
Ottiene una proprietà JavaScript |
String() |
Converte un valore JavaScript in una stringa Go |
Questa tabella riassume i metodi chiave che abbiamo utilizzato per interagire tra Go e JavaScript. Continuando il tuo viaggio con WebAssembly, troverai questi metodi estremamente utili!
Credits: Image by storyset