This removes tedium in our examples and docs by using `Runtime.Close` instead of tracking everything. Internal tests still track too much, but anyway at least this stops suggesting others should do it. This also changes our examples to use log.PanicXX so that the line number goes into the console output. Signed-off-by: Adrian Cole <adrian@tetrate.io>
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package wazero
|
|
|
|
import (
|
|
"context"
|
|
_ "embed"
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
// This is an example of how to use WebAssembly via adding two numbers.
|
|
//
|
|
// See https://github.com/tetratelabs/wazero/tree/main/examples for more examples.
|
|
func Example() {
|
|
// Choose the context to use for function calls.
|
|
ctx := context.Background()
|
|
|
|
// Create a new WebAssembly Runtime.
|
|
r := NewRuntime()
|
|
|
|
// Add a module to the runtime named "wasm/math" which exports one function "add", implemented in WebAssembly.
|
|
mod, err := r.InstantiateModuleFromCode(ctx, []byte(`(module $wasm/math
|
|
(func $add (param i32 i32) (result i32)
|
|
local.get 0
|
|
local.get 1
|
|
i32.add
|
|
)
|
|
(export "add" (func $add))
|
|
)`))
|
|
if err != nil {
|
|
log.Panicln(err)
|
|
}
|
|
defer mod.Close(ctx)
|
|
|
|
// Get a function that can be reused until its module is closed:
|
|
add := mod.ExportedFunction("add")
|
|
|
|
x, y := uint64(1), uint64(2)
|
|
results, err := add.Call(ctx, x, y)
|
|
if err != nil {
|
|
log.Panicln(err)
|
|
}
|
|
|
|
fmt.Printf("%s: %d + %d = %d\n", mod.Name(), x, y, results[0])
|
|
|
|
// Output:
|
|
// wasm/math: 1 + 2 = 3
|
|
}
|