goの中でjavascriptを実行できるgoja
goのコードからjavascript関数を呼び出し/js関数からgo関数を呼び出すことができる。
// 返り値
// 1つ目:js関数がreturnした値
// この例ではanyにしているけど適宜
// 2つ目:js関数から例外で飛び出した場合にgojaのerrorでwrapしたエラー
var jsFunc func(int, http.ResponseWriter, map[string]any) (any, error)
vm := goja.New()
if _, err := vm.RunProgram(compiledJS); err != nil {
// omit
}
if f := vm.Get("jsFunc"); f == nil {
// omit
} else if err := vm.ExportTo(f, &jsFunc); err != nil {
// omit
}
jsRet, err := jsFunc(123, w, map[string]any{"yes", 456})
js関数にgoのオブジェクトを渡して、js関数からメソッド等呼び出せる
function jsFunc(code, w, opt) {
w.Header().Set("content-type", "text/plain");
}
- jsから呼び出したgo関数がエラー(多値戻り値2要素の2要素目)を返すと、js側で例外となって飛び出す
環境
- goja v0.0.0-20240220182346-e401ed450204
- golang 1.22.1