Open3
「RustによるWebAssembly作成入門」をGoでやる
やれるかわからないけどやってみるぜ!
とりあえずHello Worldを
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
$ GOOS=wasip1 GOARCH=wasm go build -o hello.wasm
$ wasmtime hello.wasm
Hello, World!
3.4 grepコマンドクローンを作ろう
wasmtimeにdirオプションを与えないとローカルのファイルを読み取れなかった。
サンドボックス化された実行環境だからって理由だ。
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
type Cli struct {
pattern string
fileName string
}
func start(cli Cli) error {
file, err := os.Open(cli.fileName)
if err != nil {
return err
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if strings.Contains(line, cli.pattern) {
fmt.Println(line)
}
}
return nil
}
func main() {
if len(os.Args) < 2 {
fmt.Println("Usage: go run main.go <pattern> <file_name>")
return
}
cli := Cli{
pattern: os.Args[1],
fileName: os.Args[2],
}
if err := start(cli); err != nil {
panic(err)
}
}
$ cat test.txt
aaa
bbb
ccc
ddd
$ GOOS=wasip1 GOARCH=wasm go build -o my-grep.wasm
$ wasmtime --dir=$PWD my-grep.wasm bbb test.txt
bbb