GoLangからのRubyスクリプトの実行

Rubyをスクリプト言語として、つまりluaのような埋め込み言語として使用するために、MRubyと呼ばれる軽量のRuby実装があります。





go用に安定したmrubyにバインドされたライブラリが1つだけ見つかりましたデフォルトでは、mrubyバージョン1.2.0(2015リリース)をビルドできます。バージョン1.4.1(2018リリース)までビルドしてみることができます。しかし、mrubyの現在のバージョンにはバージョン2.1.2(2020)があります。mruby2.1.0をサポートするフォークがあります。いくつかのマイナーな変更の後、このフォークを使用してバージョン2.1.2を取得します。





2.1.0より前のバージョンでは、少なくとも次の非互換性に注意する必要があります。





バージョン2.1.1





  • MRB_INT16構成オプションを削除します。





バージョン2.1.2





  • IO#readchar returns a UTF-8 character fragment instead of EOFError if EOF is reached in the middle of UTF-8 characters. (86271572) This behavior is different from CRuby, but it is a mruby specification that supports either ASCII or UTF-8 exclusively.





  • Remove mrb_run() from C APIs.





go-mruby mrb_run. "Breaking Changes" . go-mruby:





  • https://github.com/mrbgems/go-mruby/tree/mruby-2 mruby-2.





  • go.mod go.sum go-mruby. , go . , go , go . go-mruby vendor .





  • mruby.go Run(), RunWithContext().





  • Makefile MRUBY_COMMIT 2.1.2 - mruby.





  • make. mruby vendor libmruby.a.





. mruby-error (https://github.com/mitchellh/go-mruby/pull/75). mruby require . . http://mruby.org/libraries/, mruby/build_config.rb . mruby/examples/mrbgems , mruby/mrbgems . , mruby-metaprog.





jsonサポートを有効にしてみましょう。これを行うには、ライブラリをgo-mruby /build_config.rbに登録する必要があります。





gem :github => 'iij/mruby-iijson'
      
      



JSON.parseの使用例ですが、ご覧のとおり、symbolize_namesオプションはこのライブラリではサポートされていないようです。





func main() {
	mrb := mruby.NewMrb()
	defer mrb.Close()

	class := mrb.DefineClass("Example", nil)
	class.DefineClassMethod("json_value", func(m *mruby.Mrb, self *mruby.MrbValue) (mruby.Value, mruby.Value) {
		return mruby.String(`{"int":1, "array":["s1", "s2", {"nil": null}]}`), nil
	}, mruby.ArgsReq(1))

	result, err := mrb.LoadString(`JSON.parse(Example.json_value, {"symbolize_names" => true})`)
	if err != nil {
		panic(err.Error())
	}

	// Result: {"int"=>1, "array"=>["s1", "s2", {"nil"=>nil}]}
	fmt.Printf("Result: %s\n", result.String())
}
      
      






All Articles