環境
・macOS Big Sur ver. 12.6 (21G115)
・MacBook Air M1, 2020 メモリ 8GB
・go1.18.3 darwin/arm64
ファイル構成
├── ast ├── docs │ ├── build.wasm │ ├── index.html │ └── wasm_exec.js ├── evaluator ├── lexer ├── object ├── parser ├── repl ├── server ├── token ├── wasm │ ├── melody.txt │ └── webassembly.go ├── go.mod ├── go.sum ├── melody.txt └── main.go
困っていること
syscall/jsを使ってファイルの読み込みをしたいです.JavaScriptには標準入力はないとのことなので,よく実装手順も調べずにファイル読み込みへと方針を変えて進めていたのですが,次のドキュメントを読んでみたり簡単に検索をかけてはみたのですが,ファイル読み込みのようなことをしているものが見つけられず.止まってしまっております.
https://pkg.go.dev/syscall/js#Value.Get
JavaScript単体ならば https://into-the-program.com/javascript-read-the-file/ のようにファイル読み込みはできるようなので方法自体はあるのではと考えております.
このサイトを,質問を書いているときに見つけ,これまでに書いてきたものの応用で記述できそうな気もしていますので,後程ゆっくり目を通して見て,回答をいただく前に解決した際には自己解決のところに記述させていただく可能性がございます.
webassembly.go
Go
1btn.Call("addEventListener", "click", js.FuncOf(func(js.Value, []js.Value) interface{} { 2 //ファイルの読み込み 3 f, err := os.Open("../melody.txt") 4 if err != nil { 5 fmt.Println(err) 6 fmt.Println("fail to read file") 7 } 8 data := make([]byte, 1024) 9 count, err := f.Read(data) 10 if err != nil { 11 fmt.Println(err) 12 fmt.Println("fail to read data") 13 } 14 fmt.Printf("read %d bytes:\n", count) 15 code.Set("value", string(data[:count])) 16 17 18 mb := NewMusicBox() 19 window.Set("play", js.FuncOf(func(this js.Value, args []js.Value) interface{} { 20 mb.Play(Note{args[0].Int(), args[1].Float()}) 21 return nil 22 })) 23 code := document.Call("getElementById", "code") 24 src := code.Get("value") 25 window.Call("eval", src) 26 return nil 27 }))
上述のコードの,仮にGoのまま書いている
Go
1 //ファイルの読み込み 2 f, err := os.Open("../melody.txt") 3 if err != nil { 4 fmt.Println(err) 5 fmt.Println("fail to read file") 6 } 7 data := make([]byte, 1024) 8 count, err := f.Read(data) 9 if err != nil { 10 fmt.Println(err) 11 fmt.Println("fail to read data") 12 } 13 fmt.Printf("read %d bytes:\n", count)
の部分を置き換えたいです.
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/11/11 01:35 編集
2022/11/11 05:59 編集
2022/11/11 06:02 編集
2022/11/11 06:48