According func or method's return values, returnHandle will automatically write content to ResponseWriter.
The return value could be below types or interfaces:
-
string
Will convert string to []byte and write to ResponseWriter -
[]byte
Write to ResponseWriter -
error
If error is not nil, Write header 500 and the content is error.Error() -
AbortError
if AbortError, Write header AbortError.Code and the content is AbortError.Error()
And if you have an anonymous tango.JSON
or tango.XML
, the return value could be:
-
error
If it's Json, will reproduce {"err": err.Error()} -
map
If it's Json, will reproduce json -
slice
-
structs
will reproduce json
For example, we will write a json response.
type Action struct {
tango.JSON
}
var i int
func (Action) Get() interface{} {
if i == 0 {
i = i + 1
return map[string]interface{}{"i":i}
}
return errors.New("could not visit")
}
func main() {
t := tango.Classic()
t.Any("/", new(Action))
t.Run()
}
Of course you can also add HTTP status on return values. For example,
type Action struct {
tango.JSON
}
var i int
func (Action) Get() (int, interface{}) {
if i == 0 {
i = i + 1
return 200, map[string]interface{}{"i":i}
}
return 500, errors.New("could not visit")
}
func main() {
t := tango.Classic()
t.Any("/", new(Action))
t.Run()
}