// Echo 框架使用指南
// 本文详细介绍如何使用 Echo 框架开发高效的 Go Web 应用程序。

// 1. 引入依赖
// 在项目中引入 Echo 框架。
import (

"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"net/http"
"os"
"strconv"

)

func main() {

// 2. 初始化 Echo 实例
e := echo.New()

// 3. 设置全局中间件
// 使用 Logger 中间件记录请求日志
e.Use(middleware.Logger())
// 使用 Recover 中间件自动恢复崩溃
e.Use(middleware.Recover())
// 使用 CORS 中间件,允许跨域请求
e.Use(middleware.CORS())

// 4. 定义路由
// 定义一个简单的 GET 请求处理器
e.GET("/", func(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, Echo!")
})

// 定义一个接收 JSON 请求的 POST 请求处理器
e.POST("/users", func(c echo.Context) error {
    // 解析 JSON 数据到结构体
    user := new(struct {
        Name  string `json:"name"`
        Email string `json:"email"`
    })
    if err := c.Bind(user); err != nil {
        return err
    }
    return c.JSON(http.StatusOK, map[string]interface{}{
        "message": "User created successfully",
        "user":    user,
    })
})

// 定义一个带路径参数的 GET 请求处理器
e.GET("/users/:id", func(c echo.Context) error {
    id := c.Param("id") // 获取路径参数
    return c.String(http.StatusOK, "User ID: "+id)
})

// 定义一个带查询参数的 GET 请求处理器
e.GET("/search", func(c echo.Context) error {
    query := c.QueryParam("query") // 获取查询参数
    return c.String(http.StatusOK, "Search Query: "+query)
})

// 定义一个处理文件上传的 POST 请求处理器
e.POST("/upload", func(c echo.Context) error {
    file, err := c.FormFile("file")
    if err != nil {
        return err
    }
    return c.String(http.StatusOK, "File uploaded: "+file.Filename)
})

// 定义一个返回服务器状态的路由
e.GET("/status", func(c echo.Context) error {
    return c.JSON(http.StatusOK, map[string]string{
        "status":  "running",
        "version": "1.0.0",
    })
})

// 定义一个使用中间件的路由组
apiGroup := e.Group("/api")
// 使用 BasicAuth 中间件验证用户身份
apiGroup.Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {
    if username == "admin" && password == "secret" {
        return true, nil
    }
    return false, nil
}))
apiGroup.GET("/info", func(c echo.Context) error {
    return c.JSON(http.StatusOK, map[string]string{
        "status": "success",
        "message": "Authenticated API access",
    })
})

// 定义一个处理错误的示例
e.GET("/error", func(c echo.Context) error {
    return echo.NewHTTPError(http.StatusBadRequest, "This is a bad request")
})

// 定义一个计算器服务示例
e.GET("/add", func(c echo.Context) error {
    a := c.QueryParam("a")
    b := c.QueryParam("b")
    intA, err := strconv.Atoi(a)
    if err != nil {
        return c.String(http.StatusBadRequest, "Invalid parameter 'a'")
    }
    intB, err := strconv.Atoi(b)
    if err != nil {
        return c.String(http.StatusBadRequest, "Invalid parameter 'b'")
    }
    result := intA + intB
    return c.JSON(http.StatusOK, map[string]int{
        "result": result,
    })
})

// 定义一个安全配置的 HTTPS 服务
sslCert := os.Getenv("SSL_CERT_PATH")
sslKey := os.Getenv("SSL_KEY_PATH")
if sslCert != "" && sslKey != "" {
    go func() {
        if err := e.StartTLS(":443", sslCert, sslKey); err != nil {
            e.Logger.Error("Failed to start HTTPS server: ", err)
        }
    }()
}

// 5. 启动服务器
// 监听指定端口,默认运行在 8080 端口
e.Logger.Fatal(e.Start(":8080"))

}

每日更新-免费小火箭账号
不要错过任何机会,探索最新的应用和游戏,就在我们的平台。
立即访问
最后修改:2024 年 12 月 21 日
如果觉得我的文章对你有用,请随意赞赏