「WALK」というパッケージをインストールするとWindows環境のGoでGUIが作れるようですので、試してみます。
ディレクトリの作成
mkdir walktest
cd walktest
go.modファイルの作成
(多分プロジェクトファイルと思われる)
go mod init example.org/walktest
作成されたgo.modの中身
module example.org/walktest
go 1.19
パッケージの追加
go get github.com/lxn/walk
go.modの中身
module example.org/walktest
go 1.19
require (
github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 // indirect
github.com/lxn/win v0.0.0-20210218163916-a377121e959e // indirect
golang.org/x/sys v0.1.0 // indirect
gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect
)
サンプルプログラム
github.com/walkのサンプルプログラムからコントロール部分を省いてウィンドウを表示するだけのプログラムにしてみました。
ファイル名:walktest.exe.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
</dependentAssembly>
</dependency>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
</windowsSettings>
</application>
</assembly>
ファイル名:walktest.go
package main
import (
. "github.com/lxn/walk/declarative"
)
func main() {
MainWindow{
Title: "WalkTest",
MinSize: Size{640, 480},
Layout: VBox{},
}.Run()
}
ビルド&実行
go build
./walktest.exe
ウィンドウが表示されました。.manifestの中身は全く理解していませんが、とりあえずこの内容で動いてくれました。
.goのメインルーチンですが、MainWindowでウィンドウ及びおコントロールを定義し、.Run()で実行していると思われます。今回は作成しませんでしたが、各種コントロールなどに紐ずくイベントを処理することでGUIアプリケーションとして動作すると思われます。Go言語で綺麗にラップされていて目新しくみえますが、中身はWin32APIらしいので、そちらの開発経験のある方はとっつき安いと思います。
コメント