返回值

根据函数或者结构体方法的返回值,returnHandle 插件将自动将内容写入到 ResponseWriter.
目前支持的返回值及对应的行为如下:

  • string
    返回string,将会把string转为[]byte同时写入到ResponseWriter

  • []byte
    返回[]byte将会直接写入ResponseWriter

  • error
    返回错误,如果error不为nil, 则写入返回头500,内容为error.Error()

  • AbortError
    如果返回AbortError, 则写入返回头AbortError.Code,内容为AbortError.Error()

如果包含了匿名结构体 tango.JSON 或者 tango.XML,则返回值的行为将会发生变化:

  • error
    返回值为error,如果是Json,则会生成{"err": err.Error()}的Json格式

  • map, slice, structs
    返回值为map,如果是Json,则会自动序列化为Json格式。

例子代码如下:

  1. type Action struct {
  2. tango.JSON
  3. }
  4. var i int
  5. func (Action) Get() interface{} {
  6. if i == 0 {
  7. i = i + 1
  8. return map[string]interface{}{"i":i}
  9. }
  10. return errors.New("could not visit")
  11. }
  12. func main() {
  13. t := tango.Classic()
  14. t.Any("/", new(Action))
  15. t.Run()
  16. }

当然返回值也可以加上HTTP状态,如:

  1. type Action struct {
  2. tango.JSON
  3. }
  4. var i int
  5. func (Action) Get() (int, interface{}) {
  6. if i == 0 {
  7. i = i + 1
  8. return 200, map[string]interface{}{"i":i}
  9. }
  10. return 500, errors.New("could not visit")
  11. }
  12. func main() {
  13. t := tango.Classic()
  14. t.Any("/", new(Action))
  15. t.Run()
  16. }