A simple and flexible solution to render a value to a io.Writer
using different formats based on a format string argument.
Designed around using a custom type/struct to render your output. Thanks to Go's
marshaling interfaces, you get JSON, YAML, and XML support almost for free.
While plain text output is supported by the type implementing io.Reader
,
io.WriterTo
, fmt.Stringer
, and error
interfaces, or by simply being a type
which can easily be type cast to a byte slice.
Originally intended to easily implement CLI tools which can output their data as
plain text, as well as JSON/YAML with a simple switch of a format string. But it
can just as easily render to any io.Writer
.
The package is designed to be flexible and extensible with a sensible set of
defaults accessible via package level functions. You can create your own
Renderer
for custom formats, or create new handlers that support custom
formats.
import "github.com/jimeh/go-render"
Basic usage to render a value to various formats into a io.Writer
:
version := &Version{Version: "1.2.1", Stable: true, Latest: false}
err = render.Pretty(w, "text", version)
// 1.2.1 (stable: true, latest: false)
err = render.Pretty(w, "json", version)
// {
// "version": "1.2.1",
// "latest": false,
// "stable": true
// }
err = render.Compact(w, "json", version)
// {"version":"1.2.1","latest":false,"stable":true}
err = render.Pretty(w, "yaml", version)
// version: 1.2.1
// latest: false
// stable: true
err = render.Pretty(w, "xml", version)
// <version latest="false" stable="true">1.2.1</version>
The above assumes the following Version
struct:
type Version struct {
Version string `json:"version" yaml:"version" xml:",chardata"`
Latest bool `json:"latest" yaml:"latest" xml:"latest,attr"`
Stable bool `json:"stable" yaml:"stable" xml:"stable,attr"`
}
func (v *Version) String() string {
return fmt.Sprintf(
"%s (stable: %t, latest: %t)", v.Version, v.Stable, v.Latest,
)
}
Please see the Go Reference for documentation and further examples.