与制表师一起去文本/模板

I try to have a pretty table with text/template but the columns are not aligned. text/tabwriter work but text/template make a cleaner code.

How can I use text/template with text/tabwriter?

This is my test :

package main

import (
    "os"
    "text/template"
)

type a struct {
    Title string
    Items []items
}

type items struct {
    Title string
    Body  string
}

const templ = `{{.Title}}{{range .Items}}
{{.Title}}  {{.Body}}{{end}}
`

func main() {
    data := a{
        Title: "title1",
        Items: []items{
            {"item1", "body1"},
            {"item2", "body2"},
            {"verylongitem3", "body3"}},
    }
    t := template.New("test")
    t, _ = t.Parse(templ)
    t.Execute(os.Stdout, data)
}

Output :

title1
item1   body1
item2   body2
verylongitem3   body3

Replace

t.Execute(os.Stdout, data)

with

w := tabwriter.NewWriter(os.Stdout, 8, 8, 8, ' ', 0)
if err := t.Execute(w, data); err != nil {
    // handle error
}
w.Flush()

Also, add tabs to the template where you want the column breaks.

playground example