GopherJS 1 / 15 Webのはなし 昨今はフロントエンドでより多くの処理をするようになっている サーバーサイドとフロントエンドで全く同じ処理を行いたい場合 もある 2 / 15 たとえば サーバーサイドのAPIを使うより速く結果を得たい マークアップテキスト(Markdown)をフロントエンドでパースし たい 3 / 15 ソリューション nodejs 4 / 15 ソリューション nodejs みんながみんなサーバーサイドをJavaScriptで書きたいわけでは ない 5 / 15 ソリューション nodejs Golang Python Ruby Haskell のコードをJavaScriptに変換するという手段 6 / 15 GopherJS https://github.com/gopherjs/gopherjs GoのコードをJavaScriptに変換する Goのライブラリをブラウザ上で動かす DOM操作 GoからJavaScriptライブラリの呼び出し JavaScriptからGoライブラリの呼び出し が可能 7 / 15 例1 DOM操作 js.Global .Get("document") .Call("write", <input id="btn" type="button" value="alert"> ) js.Global .Get("document") .Call("getElementById", "btn") .Set("onclick", func(ev *js.Object) { js.Global.Call("alert", "hoge") }) 8 / 15 例1 DOM操作 js.Global .Get("document") .Call("write", <input id="btn" type="button" value="alert"> ) js.Global .Get("document") .Call("getElementById", "btn") .Set("onclick", func(ev *js.Object) { js.Global.Call("alert", "hoge") }) main = function() { var $ptr; $global.document.write( $externalize("<input id=\"btn\" type=\"button\" value=\"alert\">", $String)); $global.document.getElementById( $externalize("btn", $String)).onclick = $externalize((function(ev) { var $ptr, ev; $global.alert($externalize("hoge", $String)); }), funcType); }; 関数もエクスポート可能 9 / 15 例2 fmt fmt.Println("test") C#でいう Console.WriteLine("test") 10 / 15 例2 fmt fmt.Println("test") C#でいう Console.WriteLine("test") _r = fmt.Println(new sliceType$1([new $String("test")])); /* */ $s = 1; case 1: if($c) { _r; /* */ $s = -1; case -1: } return; } if ($f === undefined) { $f = { $blk: main }; } $f.$p 11 / 15 例2 fmt fmt.Println("test") C#でいう Console.WriteLine("test") _r = fmt.Println(new sliceType$1([new $String("test")])); /* */ $s = 1; case 1: if($c) { _r; /* */ $s = -1; case -1: } return; } if ($f === undefined) { $f = { $blk: main }; } $f.$p 12 / 15 例3 Goのライブラリの利用 Blackfriday: a markdown processor for Go https://github.com/russross/blackfriday var data = []byte( `# Title sample markdown **strong**` ) func main() { b := blackfriday.MarkdownBasic(data) js.Global.Get("document").Call("write", string(b)) } 13 / 15 例4 GoのライブラリをJavaScriptから利用 js.Global.Set("convert", func(text string) string { return string(blackfriday.MarkdownBasic([]byte(text))) }) global に convert をエクスポート document.write(convert("*hoge* ***fuga***")); 14 / 15 まとめ JavaScriptはアセンブラ 15 / 15
© Copyright 2024 ExpyDoc