shiny fluid example
[tag:]
昨日shinyに追加されたfluid dynamicsのexampleが
とてもgolangらしくてよい。
・main()はイベント処理に集中、図の作成は別のgoroutineで行う ・Crosses(StageVisible)で表示中かどうかの判定 ・マウスイベントや図の情報は共有データとし、MutexでLock/Unlock ・表示中はtickerで60Hz毎にsimulate()を回す (1/60秒毎に発火するchannelを使用) ・非表示中は短絡させ、simulateを行わないようにする ・図ができたらchannel経由でイベントを送る (マウスやキーボードのイベントと同列で他のgoroutineがイベントを発火できる)
特に最後のポイントは結構肝だと思っている。
これまでいくつかのGUIライブラリを触ってきたが、
golangでchannel経由のイベント処理をちゃんと実装して
いたものはなく、ほとんどがコールバックだった。
stでもchannelでイベント処理の振り分けを行っているが、
こういうことができると全体の見通しがよくなってすてきだ。