GitHub - kasvith/teks: Easily get custom go template based outputs to your comma...
source link: https://github.com/kasvith/teks
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
teks : awesome outputs for your commands
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
Install
teks
is a go package. To use it execute
go get github.com/kasvith/teks
Available formatting options
Name Usagejson
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
Example
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 whatever type Person struct { Name string Age int Address string } func main() { var format string // default one will printout Name and Age in tabular format flag.StringVar(&format, "format", "table {{.Name}}\t{{.Age}}", "format of output") flag.Parse() // whatever data you have persons := []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 context ctx := teks.NewContext(os.Stdout, format) // create a renderer function to match signature defined in teks.Renderer renderer := func(w io.Writer, t *template.Template) error { for _, p := range persons {examples git:(master) ✗ if err := t.Execute(w, p); err != nil { return err } _, _ = w.Write([]byte{'\n'}) } return nil } // headers for table tableHeaders := 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 output if err := 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.
Contribution
All contributions are welcome. Raise an Issue or a Pull Request
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK