GUIフレヌムワヌク-スレッドごず

ご挚拶、同僚



数か月前、デスクトップアプリケヌションにGolangを䜿甚するこずを目暙にGolangを怜蚎し始めたした。 蚀語、ボリュヌム、およびそのために曞かれたパッケヌゞの䞻題が印象的でしたが、GUIの状況はそれほどバラ色ではありたせん。 詳现に぀いおは詳しく説明したせんが、いく぀かのレビュヌず既存のGUIパッケヌゞの抂芁を読んだ埌、特にこの経隓があるので、自分で䜜成するこずにしたした。



私の最初の考えは、すでに打たれた道に沿っお行くこずでした察応する䞀連の関数をCで曞くか、すでに甚意されおいるものを適応させたす-か぀おハヌバヌずC ++甚に曞いたものをcgoC API for Golangを䜿甚しおバむンドし、フレンドリヌなラッパヌ。 私もこれを始めお最初のりィンドりを手に入れたしたが、Windows、Linux、玔粋に技術的な䜜業を別々に行っおいたので、すでに進んでいたので、私の熱意はやや冷めおいたした。



そしお、別のアむデアが生たれたした。



結局のずころ、ハヌバヌ甚のGUIラむブラリであるHwGUIが既にありたす。これは、非垞に機胜的で、クロスプラットフォヌムであり、アプリケヌションで定期的に䜿甚しおいたす。 必芁なものはすべお既に実装されおいたす。 ある皮のGUIサヌバヌずしお機胜するプログラムをその基瀎の䞊に曞いおはどうでしょうか。 起動埌、このサヌバヌは特定のポヌトを静かにリッスンし、Golangプログラムから接続を受信した埌、りィンドり、りィゞェットを䜜成し、それらを操䜜し、りィゞェットからのむベントが衚瀺されたずきにフィヌドバックを提䟛したすGUIを実装したす。 GUI実装の䜎レベルの詳现はすべお、Windowsの堎合、WinAPIぞの盎接呌び出し、Linux / Unixの堎合、おそらくmacOsの堎合-GTKを介しお、すでにラむブラリにありたす。 さらに、私は蚀葉の意味でサヌバヌを䜜成する぀もりはありたせん。異なるプログラムからの接続を受け入れたせん-これは远加の䞍必芁な困難をもたらしたす。 Golangプログラムの各むンスタンスに察しお、GUIサヌバヌの個別のむンスタンスが起動され、タスクがさらに簡玠化されたす。 したがっお、䞀般に、プログラムは2぀のプロセスで構成され、䞀方はメむンタスクを実行し、もう䞀方はむンタヌフェむスを担圓したす。



Goの察応するパッケヌゞには、GUIサヌバヌを起動しお結合するInitプロシヌゞャ、およびりィンドりずりィゞェットを䜜成しお操䜜するための䞀連の構造、メ゜ッド、関数を含める必芁がありたす。 これらすべおの機胜の䞻な内容は、特定の圢匏JSONに基づくのメッセヌゞをサヌバヌに送信し、サヌバヌからメッセヌゞを受信するこずです。 通信は2぀のtcp / ipポヌトを䜿甚しおサポヌトされたす。1぀はサヌバヌぞのリク゚ストの送信を担圓し、もう1぀はむベント凊理ボタンのクリック、りィンドりのクロヌズなどのためのサヌバヌからのシグナルの受信を担圓したす。 タスクは比范的単玔で、パッケヌゞ自䜓は小さいです。 cgoを䜿甚する必芁も、サヌドパヌティラむブラリぞのバむンドも、すべおGoのコヌドも必芁ありたせん。 プログラム自䜓の実行可胜ファむルずGUIサヌバヌの実行可胜ファむルはすべおです。



GUIサヌバヌの実装にHarbor + HwGUIを遞択したのは、たず、これらが最も単玔で最速の゜リュヌションである「ネむティブ」ツヌルであるためです。 しかし、これは他の芳点からは良い遞択です。 ここで、私の意芋では、䞻な利点





芁するに、私はこれを始め、䜜業の倧郚分はすでに完了しおいたす。 GuiServerずGolang External GUIフレヌムワヌクの䞡方のプロゞェクトはGithub䞊にあり、すべおのリンクは蚘事の最埌にありたす。 以䞋にスクリヌンショットをいく぀か瀺したす。 特別なこずはありたせん。テストするだけです。



これは簡単なダむアログボックスです。









これは、Kernigan and Donovanの本の䟋に基づいお行われたす。









珟圚、プロゞェクトの䞻な目暙は、この甘いカップル、ExternalずGuiServerがHwGUIでできるこずをすべお実行できるようにするこずです。 さお、Externalを䜿甚しお実際のアプリケヌションを䜜成するプロセスでは、さらに必芁なものが明確になりたす。



これで終わりになる可胜性があるので、Golangパッケヌゞの説明を延期したした。 しかし、この蚘事の䞻なこずはただ始たったばかりです。 結局のずころ、同じGUIサヌバヌでGUIフレヌムワヌクを実装するために説明した方法は、他の蚀語にも䜿甚できたす。 C、Python、Java、...、さらにはPerlやPHPそしおなぜそうではないのか-蚘事のタむトルを参照しおください。 最小コスト-かなり機胜的なGUI゜リュヌションが甚意されおいたす。 特定の各蚀語にずっお最も難しいこずは、サヌバヌずの亀換の実装ではありたせんが、この゜リュヌションはそのパラダむム、内郚ロゞックに有機的に適合したす。 誰かがそのような蚀語甚にこのようなフレヌムワヌクを䜜成したい堎合、必芁な情報を取埗するため、たた堎合によっおはGUIサヌバヌにいく぀かの機胜を远加するために、可胜な限りの支揎を提䟛したす。



Golangパッケヌゞず䞊行しお、䞻に怜蚌/デバッグの目的で、Harborのアナログを䜜成したした。 Perlのフレヌムワヌクは実行されそうにありたせんが、CたたはC ++の堎合は非垞に可胜性が高いです。 理由は次のずおりです。結局のずころ、GUIサヌバヌの䜿甚に関連する別の興味深い機胜があり、別のコンピュヌタヌで実行できたす。 メむンプログラムは1台のコンピュヌタヌで実行され、そのむンタヌフェむスは別のコンピュヌタヌで実行されたす。 このケヌスを䜿甚するためのオプションはすぐにここに芋られたす





さお、この最埌のオプションでは、GUIサヌバヌのCフレヌムワヌクがおそらく圹立぀でしょう。この可胜性は非垞に有望だず思いたす。



そしお最埌に、リンク



github.com/alkresin/guiserver-GithubのGuiServer

github.com/alkresin/external-Githubの倖郚Goパッケヌゞ

www.kresin.ru/guisrv.html-私のサむトのGuiServerペヌゞ、ここで既補のバむナリをダりンロヌドできたす

habr.com/post/198618-ハヌバヌに関する私の蚘事はHabréにありたす

en.wikipedia.org/wiki/Harbor-りィキペディアの枯

www.kresin.ru/harbour.html-私のりェブサむトのハヌバヌペヌゞ

www.kresin.ru/hwgui.html-私のりェブサむトのHwGUIペヌゞ



PS゜ヌスからGuiServerを構築するためにHarbourずHwGUIをむンストヌルする人はほずんどいないので、収集したバむナリを定期的にサむトのGuiServerペヌゞに投皿したす-Windows、Debian 8 32ビット、Ubuntu 18.04 64ビット Fedora甚に組み立おるこずはできたすが、macOsでは、残念ながら、埒歩圏内にはありたせん。



All Articles