Go言語でWindowsのGUIを作る「WALK」

Go言語 コンピュータ
Go言語

「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らしいので、そちらの開発経験のある方はとっつき安いと思います。

コメント