Goでちょっとリッチな木構造を扱うライブラリ書いた
きのうは Goプロジェクトの概要をツリー表示する goverview の紹介を緊急で配信しました。
きょうはその goverview で利用している ツリー表示用のライブラリ go-proptree を紹介します。
Goで木構造のレンダリング
tree
コマンドでもおなじみの木構造をアスキーでレンダリングするわけですが、go-proptreeではちょっとリッチな情報を付加できるようになっています。
以下はよくあるツリー構造の例です。
┌ Root
├─┬ Child A
│ └── Grandchild
└── Child B
go-proptree はこの木構造に、ノードごとにアイコンやタグ、または複数行の説明を追加することができます。
例えば以下のような感じ。
┌* Root: tag
├─┬ Child A
│ │ This is a description about Child.
│ │ You can set multiple lines.
│ └──@ Grandchild
└── Child B
This is a description about Child B.
上記のツリーを描くコードは以下のようになります。
package main
import (
"os"
pt "github.com/bayashi/go-proptree"
)
func main() {
tree := pt.Node("Root").Icon("*").Tag("tag")
child := pt.Node("Child A").
Description("This is a description about Child.").
Description("You can set multiple lines.")
tree.Append(child).
Append(pt.Node("Child B").Description("This is a description about Child B."))
child.Append(pt.Node("Grandchild").Icon("@"))
tree.RenderAsText(os.Stdout)
}
Node
でノードを追加して、Icon
tag
Description
でプロパティを設定するだけです。簡単ですね。
ツリー構造をレンダリングするライブラリはたくさんあります。goverview を書こうと思ったとき、プロパティも合わせてレンダリングできる go-proptree 相当のライブラリもあるんじゃないかと思ってそこそこ探したのですが、見つけられなかったので自分で書きました。シンプルな木構造ライブラリを見繕って、魔改造して仕上げました。得意分野です。
何かの折に使ってみてください。
ではでは。