Package tblfmt
provides streaming table encoders for result sets (ie, from a
database), creating tables like the following:
author_id | name | z
-----------+-----------------------+---
14 | a b c d |
15 | aoeu +|
| test +|
| |
16 | foo\bbar |
17 | a b \r +|
| a |
18 | θ’ θ’ θ’ |
19 | θ’ θ’ θ’+| a+
| |
(6 rows)
Additionally, there are standard encoders for JSON, CSV, HTML, unaligned and
other display variants supported by usql
.
Install in the usual Go fashion:
$ go get -u github.com/xo/tblfmt
tblfmt
was designed for use by usql
and Go's native database/sql
types, but will handle any type with the following interface:
// ResultSet is the shared interface for a result set.
type ResultSet interface {
Next() bool
Scan(...interface{}) error
Columns() ([]string, error)
Close() error
Err() error
NextResultSet() bool
}
tblfmt
can be used similar to the following:
// _example/example.go
package main
import (
"log"
"os"
_ "github.com/lib/pq"
"github.com/xo/dburl"
"github.com/xo/tblfmt"
)
func main() {
db, err := dburl.Open("postgres://booktest:booktest@localhost")
if err != nil {
log.Fatal(err)
}
defer db.Close()
res, err := db.Query("select * from authors")
if err != nil {
log.Fatal(err)
}
defer res.Close()
enc, err := tblfmt.NewTableEncoder(
res,
// force minimum column widths
tblfmt.WithWidths(20, 20),
)
if err = enc.EncodeAll(os.Stdout); err != nil {
log.Fatal(err)
}
}
Which can produce output like the following:
ββββββββββββββββββββββββ¦ββββββββββββββββββββββββββββ¦ββββ
β author_id β name β z β
β βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ¬ββββ£
β 14 β a b c d β β
β 15 β aoeu β΅β β
β β test β΅β β
β β β β
β 2 β θ’ θ’ θ’ β β
ββββββββββββββββββββββββ©ββββββββββββββββββββββββββββ©ββββ
(3 rows)
Please see the Go Reference for the full API.
Run using standard go test
:
$ go test -v