Go言語でGUIのツールを作れるのか調べてみたら、簡単に作れそうだったので作ってみました。
作ったものは、入力したテキストをURLエンコード、Base64、HTMLエンコードするだけの簡単なツールです。
ライブラリの選択
Go言語でGUIを作るライブラリはいくつかあります。
今回はWindowsで動くツールを作りたかったので、Windows向けのライブラリのWalkを使うことにしました。
インストールは下記のコマンドを実行するだけです。
go get github.com/lxn/walk
実装
メインのソースコードを書いていきます。
walkのREADMEに書いているサンプルコードを少し変えるだけで実装できました。
package main
import (
"encoding/base64"
"html"
"log"
"net/url"
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
func main() {
var inTE, outTE *walk.TextEdit
var menu *walk.ComboBox
var menuItem = []string{
"URLエンコード",
"Base64",
"HTMLエンコード",
}
MainWindow{
Title: "conversion_tool",
MinSize: Size{600, 400},
Layout: VBox{},
Children: []Widget{
ComboBox{
AssignTo: &menu,
Model: menuItem,
CurrentIndex: 0,
},
HSplitter{
Children: []Widget{
TextEdit{AssignTo: &inTE},
TextEdit{AssignTo: &outTE, ReadOnly: true},
},
},
HSplitter{
Children: []Widget{
PushButton{
Text: "エンコード",
OnClicked: func() {
switch menu.CurrentIndex() {
case 0:
outTE.SetText(url.QueryEscape(inTE.Text()))
case 1:
outTE.SetText(base64.StdEncoding.EncodeToString([]byte(inTE.Text())))
case 2:
outTE.SetText(html.EscapeString(inTE.Text()))
}
},
},
PushButton{
Text: "デコード",
OnClicked: func() {
switch menu.CurrentIndex() {
case 0:
str, err := url.QueryUnescape(inTE.Text())
if err != nil {
log.Println(err)
}
outTE.SetText(str)
case 1:
str, err := base64.StdEncoding.DecodeString(inTE.Text())
if err != nil {
log.Println("error: ", err)
}
outTE.SetText(string(str))
case 2:
outTE.SetText(html.UnescapeString(inTE.Text()))
}
},
},
PushButton{
Text: "クリア",
OnClicked: func() {
inTE.SetText("")
outTE.SetText("")
},
},
},
},
},
}.Run()
}
ファイル名は実行ファイル名.exe.manifest
で作成します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<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>
</assembly>
後は、go build
してexeファイルを実行するだけです。
無事URLエンコードで来てることが確認できます。 実行時にコマンドプロンプトを表示しないようにするには、ビルド時に以下のオプションをつけます。
go build -ldflags="-H windowsgui"
感想
思ったより簡単に作れました。そこまで、UIにこだわらなければ、そこそこいい感じにしてくれる印象を受けました。すでにCUIで作ってるアプリをGUI化したりは結構簡単にできると思いました。
追記:もうちょっとだけ調べました。
Go言語のwalkを使ってGUIでフォルダを選択する | ITオムライス