个人技术博客——GinFramework

052006133熊鹏程 学生 2023-06-07 18:57:28
这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践寒假作业软件工程实践总结&个人技术博客
这个作业的目标课程回顾与总结、个人技术总结
其他参考文献《构建之法》

目录

 

一、技术概述

二、技术详述

2.1 流程图

2.2 go build依赖

2.3 常用术语

2.4 绑定请求体

2.5 路由

2.6 连接数据库(sqlite)

2.7 Controllers函数

三、技术使用中遇到的问题和解决过程

3.1 遇到的问题

3.2 解决过程

四、总结

五、参考文献


一、技术概述

Gin Framework(或称为Gin)是一个轻量级的Go语言Web框架,用于构建高性能的Web应用程序和API服务。它基于Go语言的标准库,并且具有简单、快速、高效的特点。Gin框架具有轻量级设计和快速的执行速度。它的性能表现出色,并且在处理HTTP请求时具有低延迟和高吞吐量。Gin提供了简洁而直观的API,使得开发者可以快速上手并构建功能丰富的Web应用程序。它采用了类似于其他Web框架的路由、中间件和上下文的概念,使开发过程更加简单和高效。Gin框架提供了灵活且易于使用的路由功能,可以轻松定义和处理不同HTTP请求的路由规则。同时,Gin还支持中间件,可以方便地实现身份验证、日志记录、错误处理等常见的功能扩展。

二、技术详述

2.1 流程图

 

2.2 go build依赖

require (
    github.com/gin-gonic/gin v1.9.0
)

2.3 常用术语

  1. 路由(Routing):路由是定义URL与处理程序(Handler)之间映射关系的过程。在Gin框架中,可以使用gin.EngineGETPOSTPUTDELETE等方法来定义路由规则。

  2. 处理程序(Handler):处理程序是处理特定路由请求的函数或方法。在Gin框架中,处理程序通常接收一个gin.Context对象,可以通过该对象获取请求参数、处理响应等操作。

  3. 中间件(Middleware):中间件是位于路由和处理程序之间的功能扩展,用于在请求到达处理程序之前或之后执行一些共享的逻辑。在Gin框架中,中间件可以通过gin.EngineUse方法来注册,并按照定义的顺序依次执行。

  4. 上下文(Context):上下文是Gin框架中的核心概念,它是一个封装了请求和响应信息的结构体,提供了一些方便的方法来获取请求参数、设置响应状态码、发送响应等操作。

  5. 绑定(Binding):绑定是将请求数据绑定到结构体或变量的过程。在Gin框架中,可以使用gin.ContextShouldBindShouldBindJSON等方法将请求的JSON数据或表单数据绑定到指定的结构体或变量上。

  6. 渲染(Rendering):渲染是将动态数据填充到模板中生成最终的HTML页面的过程。Gin框架提供了gin.ContextHTML方法和LoadHTMLGlob函数来实现模板渲染。

  7. 分组(Grouping):分组是将具有相同前缀的路由进行分组管理的机制。在Gin框架中,可以使用gin.RouterGroupGroup方法创建路由分组,并在分组上定义共享的中间件和路由规则。

  8. 错误处理(Error Handling):错误处理是在应用程序遇到错误时进行处理和返回适当的错误响应。在Gin框架中,可以使用gin.ContextAbortWithError方法来中止请求并返回错误响应。

2.4 绑定请求体

var errRequestGetChatId = c.ShouldBindJSON(&requestGetChatId)

2.5 路由

r.POST("/api/v1/chat/apiKey", AuthMiddleware(), controllers.VerifyApiKey)

2.6 连接数据库(sqlite)

DB, err = gorm.Open(sqlite.Open("database.db"), &gorm.Config{})

2.7 Controllers函数

func GetChatId(c *gin.Context) {
   defer func() {
      if err := recover(); err != nil {
         c.JSON(http.StatusInternalServerError, models.ErrCode{ErrCode: "2007"})
         // 进行适当的处理
      }
   }()
   var requestGetChatId RequestGetChatId
   var responseGetChatId ResponseGetChatId
   var errRequestGetChatId = c.ShouldBindJSON(&requestGetChatId)
   var chatConservations []models.ChatConversation
   var chatTemps []Chat
   var i = 0
   uid, err := utils.Encrypt(requestGetChatId.ApiKey)
   if err != nil {
      c.JSON(http.StatusInternalServerError, models.ErrCode{ErrCode: "3006"})
      return
   }
   apiKeyCheck := utils.IsValidApiKey(requestGetChatId.ApiKey)
   if apiKeyCheck {
      if errRequestGetChatId == nil {
         slice := []string{requestGetChatId.ApiKey}
         if !utils.Utf8Check(slice) {
            c.JSON(http.StatusBadRequest, models.ErrCode{ErrCode: "1011"})
            return
         }
         if err := utils.DB.Table("chatconversation").Where("uid=?", uid).Find(&chatConservations).Error; err == nil {
            if len(chatConservations) > 0 {
               for ; i < len(chatConservations); i++ {
                  var temp Chat
                  temp.Title = chatConservations[i].Title
                  temp.ChatId = chatConservations[i].Id
                  chatTemps = append(chatTemps, temp)
               }
            }
         } else {
            c.JSON(http.StatusInternalServerError, models.ErrCode{ErrCode: "3009"})
            return
         }
      }
      responseGetChatId.Chat = chatTemps
      c.JSON(http.StatusOK, responseGetChatId)
   } else {
      var errCode models.ErrCode
      errCode.ErrCode = "3004"
      c.JSON(http.StatusBadRequest, errCode)//返回响应体
   }
}

三、技术使用中遇到的问题和解决过程

3.1 遇到的问题

路由配置错误:初学者可能会在定义路由规则时出现错误,例如忘记添加HTTP方法、路径匹配错误等。建议仔细检查路由配置,确保路径和处理程序的对应关系正确。

参数绑定错误:Gin框架提供了方便的参数绑定功能,但初学者可能会在参数绑定时出现错误,例如忘记在结构体字段上添加标签、类型不匹配等。请确保正确地使用ShouldBind或相关方法进行参数绑定。

中间件使用错误:初学者可能会在使用中间件时出现错误,例如注册中间件的顺序不正确、中间件内部处理逻辑有误等。建议仔细了解中间件的使用方式,并确保正确注册和顺序。

3.2 解决过程

路由配置错误:

  • 仔细检查路由定义,确保HTTP方法和路径匹配正确。

  • 参考Gin文档中的路由示例,确保使用正确的路由语法。

参数绑定错误:

  • 检查结构体字段的标签,确保使用了正确的绑定标签。

  • 验证结构体字段的类型与请求参数的类型匹配。

中间件使用错误:

  • 确保正确注册中间件,并将它们按照正确的顺序添加到路由组中。

  • 仔细阅读中间件的文档,确保了解中间件的功能和正确的使用方式。

 

四、总结

在使用Gin框架进行开发的过程中,我学会了如何定义路由规则、处理不同的HTTP方法和路径,并且使用路由分组进行逻辑组织。这使得我的代码结构更加清晰,易于维护和扩展,如何方便地将请求参数绑定到结构体或变量中,并进行验证和处理。这在处理用户输入、表单提交和API请求时非常有用,提高了开发效率和代码质量,如何注册和使用中间件,例如身份验证、日志记录和错误处理。中间件的使用使得我的代码更具可维护性和可扩展性,如何在处理程序中捕获和处理错误,并返回适当的错误响应。这有助于提高应用程序的健壮性和用户体验。

五、参考文献

...全文
1083 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

686

社区成员

发帖
与我相关
我的任务
社区描述
2023年福州大学软件工程实践课程W班的教学社区
软件工程团队开发软件构建 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • aboutazhang
  • 郭渊伟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧