teks brings painless output formating for your commands. Docker/Kubernetes provides custom formatting via go-templates.
teks brings the power into any application providing a smooth intergration as a library.
teks is hevily inspired by Docker CLI
teks is a go package. To use it execute
go get github.com/kasvith/teks
| Name | Usage |
|---|---|
json | Output is formatted as JSON |
jsonPretty | Outputs a human-readable JSON with indented by 2 spaces |
upper | Convert string to uppercase |
lower | Convert string to lowercase |
split | Splits strings given by string and sep |
join | Joins strings by given separator |
title | Convert the first letter to uppercase of a string |
In this example we are going to printout details of few persons using teks.
package main
import (
"flag""fmt""io""os""text/template""github.com/kasvith/teks"
)
// Person represents a human being or whatevertypePersonstruct {
NamestringAgeintAddressstring
}
funcmain() {
varformatstring// default one will printout Name and Age in tabular formatflag.StringVar(&format, "format", "table {{.Name}}\t{{.Age}}", "format of output")
flag.Parse()
// whatever data you havepersons:= []Person{
{"Kasun", 24, "Earth"},
{"John Doe", 34, "Somewhere on earth"},
{"Spongebob", 30, "Under Sea"},
{"Harry Potter", 30, "4 Privet Drive, Little Whinging, Surrey"},
}
// create new contextctx:=teks.NewContext(os.Stdout, format)
// create a renderer function to match signature defined in teks.Rendererrenderer:=func(w io.Writer, t*template.Template) error {
for_, p:=rangepersons {
iferr:=t.Execute(w, p); err!=nil {
returnerr
}
_, _=w.Write([]byte{'\n'})
}
returnnil
}
// headers for tabletableHeaders:=map[string]string{
"Age": "Age",
"Name": "Name",
"Address": "Address",
}
//override header functions if you want//teks.HeaderFuncs = template.FuncMap{// "split": strings.Split,//}// execute context and write to our outputiferr:=ctx.Write(renderer, tableHeaders); err!=nil {
fmt.Println("Error executing template:", err.Error())
}
}Now run program as follows
➜ go run simple.go Name Age
Kasun 24
John Doe 34
Spongebob 30
Harry Potter 30
Let's pretty print Name and Address in tabular format
➜ go run simple.go --format "table {{.Name}}\t{{.Address}}"
Name Address
Kasun Earth
John Doe Somewhere on earth
Spongebob Under Sea
Harry Potter 4 Privet Drive, Little Whinging, Surrey
Let's make Name UPPERCASE
➜ go run simple.go --format "table {{upper .Name}}\t{{.Address}}"
NAME Address
KASUN Earth
JOHN DOE Somewhere on earth
SPONGEBOB Under Sea
HARRY POTTER 4 Privet Drive, Little Whinging, Surrey
You can change behavior of these headers by providing custom HeaderFuncs.
All contributions are welcome. Raise an Issue or a Pull Request