...
1 package main
2
3 import (
4 "context"
5 _ "embed"
6 "fmt"
7 "log"
8 "os"
9 "strconv"
10 "time"
11
12 "github.com/tetratelabs/wazero"
13 )
14
15
16
17
18
19
20 var ageCalculatorWasm []byte
21
22
23
24
25
26 func main() {
27
28 ctx := context.Background()
29
30
31 r := wazero.NewRuntime(ctx)
32 defer r.Close(ctx)
33
34
35
36
37
38
39
40
41 _, err := r.NewHostModuleBuilder("env").
42 NewFunctionBuilder().
43 WithFunc(func(v uint32) {
44 fmt.Println("log_i32 >>", v)
45 }).
46 Export("log_i32").
47 NewFunctionBuilder().
48 WithFunc(func() uint32 {
49 if envYear, err := strconv.ParseUint(os.Getenv("CURRENT_YEAR"), 10, 64); err == nil {
50 return uint32(envYear)
51 }
52 return uint32(time.Now().Year())
53 }).
54 Export("current_year").
55 Instantiate(ctx)
56 if err != nil {
57 log.Panicln(err)
58 }
59
60
61
62
63
64
65 ageCalculator, err := r.Instantiate(ctx, ageCalculatorWasm)
66 if err != nil {
67 log.Panicln(err)
68 }
69
70
71 birthYear, err := strconv.ParseUint(os.Args[1], 10, 64)
72 if err != nil {
73 log.Panicf("invalid arg %v: %v", os.Args[1], err)
74 }
75
76
77 results, err := ageCalculator.ExportedFunction("get_age").Call(ctx, birthYear)
78 if err != nil {
79 log.Panicln(err)
80 }
81 fmt.Println("println >>", results[0])
82
83
84 _, err = ageCalculator.ExportedFunction("log_age").Call(ctx, birthYear)
85 if err != nil {
86 log.Panicln(err)
87 }
88 }
89
View as plain text