Golang - 在使用框架时提供“if”语句后的返回

时间:2015-05-23 08:25:21

标签: if-statement go

它会给出错误missing return at end of function。我已尝试添加return nilreturn ""return c.String以及其他几项,但均无效。

package main

import (
    "github.com/hiteshmodha/goDevice"
    "github.com/labstack/echo"
    "net/http"
)

func main() {
    e := echo.New()

    e.Get("/", func(c *echo.Context, w http.ResponseWriter, r *http.Request) *echo.HTTPError {

        deviceType := goDevice.GetType(r)

        if deviceType == "Mobile" {
            return c.String(http.StatusOK, "Mobile!")
        } else if deviceType == "Web" {
            return c.String(http.StatusOK, "Desktop!")
        } else if deviceType == "Tab" {
            return c.String(http.StatusOK, "Tablet!")
        }

    })

    e.Run(":4444")
}

这与其他案例完全不同,例如here

没有框架,它可以正常工作。

1 个答案:

答案 0 :(得分:2)

此处的处理程序不是echo.Get等待的原因,而是您获取此处的原因:panic: echo: unknown handler。 要摆脱此错误,请将处理程序更改为以下内容:func(c *echo.Context) error 如果您需要从http.Request内部访问handler,可以使用*echo.Context,其中包含*echo.Response。{/ p>

工作解决方案:

e.Get("/", func(c *echo.Context) error {
    deviceType := goDevice.GetType(c.Request())

    if deviceType == "Mobile" {
        return echo.NewHTTPError(http.StatusOK, "Mobile!")
    } else if deviceType == "Web" {
        return echo.NewHTTPError(http.StatusOK, "Desktop!")
    } else if deviceType == "Tab" {
        return echo.NewHTTPError(http.StatusOK, "Tablet!")
    }

    return echo.NewHTTPError(http.StatusNoContent, "Alien probe")
})

希望有所帮助