2023/04/25

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.

上記のツリーを描くコードは以下のようになります。

Go playground

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 相当のライブラリもあるんじゃないかと思ってそこそこ探したのですが、見つけられなかったので自分で書きました。シンプルな木構造ライブラリを見繕って、魔改造して仕上げました。得意分野です。

ツリー表示用のライブラリ go-proptree

何かの折に使ってみてください。

ではでは。

サイト内検索