re-implement tabwriter.go using reflect