Go(Ebitengine)製のGUIライブラリGuiguiを試す
そのほかのGo製GUIライブラリで知っているもの
- Fyne
- Gio UI
Fyne
- 試用経験:なし
Pros
- ウィジェットは豊富そうな印象
Cons
- Cコンパイラが必要
Gio UI
- 試用経験:あり
Pros
- Goだけで使える(Cコンパイラ不要)
- Windowsでも使えた
- キレイに表示される
Cons
- 日本語フォントは自分で追加しないといけない
- IMEが使用できない
それらと比較してのGuiguiの印象
Guigui
Pros
- 日本語フォント(CKJ)が標準ライブラリで使える
- IMEも使えた
- Windowsでも動いた
Cons
- experimentalである
基本的なウィジェットはあるので、簡単なツールなら手軽に作れそう。
何か作りたい。
サンプルをコピペしながら、動かすところまではスムーズにいけた(当社比)
CLI Password Generator(mattn/genpw
)のGUIを作ってみる。
見た目の部分はgalleryとtodoのサンプルを参考にこんな感じに↓
コードもスッキリしていて、サンプルを見ればどういう使い方をするのか何となく分かる。
既存の簡単なCLIにGUIを付けたいときにも手軽に使えて良さそう。
mattn/genpw
をライブラリとして使おうと思ったけど、そういう想定のものではなかった…。コピペして使用する。ライセンス表記しておけば良いはず。
パスワードの生成のロジックはmattn/genpw
から流用するんだけど、io.Writer
が分かっていない。
パスワードが空白区切りで入ってくるので、go 1.24で追加されたbytes.FieldsSeq
で分割して、sliceに詰めてみた。
bytes.Buffer
とrange bytes.FieldsSeq(buf.Bytes())
の使い方はこれで良いのか…?
リリースパーティか何かでFieldsSeq
などを使うと効率的という話があったけど、どういうケースでどういう使い方をすると、どういうものと比較して良いんだろうか…。
var buf bytes.Buffer
err := run(&buf, o, n, nc, sc) // mattn/genpw由来の関数
if err != nil {
return
}
r.passwords = []Password{}
for v := range bytes.FieldsSeq(buf.Bytes()) {
r.passwords = slices.Insert(r.passwords, 0, NewPassword(string(v)))
}
ここに書いてあった。
従来のやり方では一度スライスにしていたのが、不要になって効率が良いらしい。
作ったもの
v0.1.0に向けて開発が進んでいるみたい。
NumberInputが使えるようになった。
数値の範囲の下限、上限やステップ数も設定できる。
上下ボタンクリックのほか、上下キー入力や直接入力も可能。
無効な値は設定できない。