ここ最近、Go界隈が盛り上がっています。まだライブラリも少ない現在、他言語で実装されているライブラリを含めて様々なソフトウェアがGoで作られています。 そこで今回は一つ変わったソフトウェアを紹介します。Goでアスキー製のテーブルを作成するtablewriterです。

インストールはgetでできます。

$ go get  github.com/olekukonko/tablewriter

実行例としてはこんな感じ。

$ ./table 
+------+-----------------------+--------+
| NAME |         SIGN          | RATING |
+------+-----------------------+--------+
|  A   |       The Good        |    500 |
|  B   | The Very very Bad Man |    288 |
|  C   |       The Ugly        |    120 |
|  D   |      The Gopher       |    800 |
+------+-----------------------+--------+

まさにアスキーテーブルです。コードは次のようになります。

package main

import "os"
import "github.com/olekukonko/tablewriter"

func main() {
  data := [][]string{
    []string{"A", "The Good", "500"},
    []string{"B", "The Very very Bad Man", "288"},
    []string{"C", "The Ugly", "120"},
    []string{"D", "The Gopher", "800"},
  }
  
  table := tablewriter.NewWriter(os.Stdout)
  table.SetHeader([]string{"Name", "Sign", "Rating"})
  for _, v := range data {
    table.Append(v)
  }
  table.Render() // Send output
}

さらにCSVファイルを読み込んで処理もできます。

package main

import "os"
import "github.com/olekukonko/tablewriter"

func main() {
  table, _ := tablewriter.NewCSV(os.Stdout, "test.csv")
  table.SetRowLine(true)         // Enable row line
  // Change table lines
  table.SetCenterSeparator("*")
  table.SetColumnSeparator("‡")
  table.SetRowSeparator("-")
  table.SetAlignment(tablewriter.ALIGN_LEFT)
  table.Render()
}

上記のコードの実行結果は次のようになります。

$ ./table 
*------------*-----------*---------*
‡ FIRST NAME ‡ LAST NAME ‡   SSN   ‡
*------------*-----------*---------*
‡ John       ‡ Barry     ‡ 123456  ‡
*------------*-----------*---------*
‡ Kathy      ‡ Smith     ‡ 687987  ‡
*------------*-----------*---------*
‡ Bob        ‡ McCornick ‡ 3979870 ‡
*------------*-----------*---------*

配置を指定したり、区切り線の種類が指定できます。コードだけを見れば、何をしているかはだいたい分かるでしょう。これを機会にGo言語に触ってみたいと思う方もいらっしゃるのではないでしょうか。 tablewriterはGo製、MIT Licenseのオープンソース・ソフトウェアです。 olekukonko/tablewriter