猿问

Golang 中的动态转换

所以......我正在使用 Gin 框架为我的想法创建一个 RESTful API,我遇到了以下问题 - 假设我有以下端点:


/a/:id/*action

/b/:id/*action

/c/:id/*action

所以,很明显,当我不采取任何行动时,我想返回给定 ID 的数据。意思是,我除了查询一些数据并返回它之外什么都不做,这意味着功能基本相同,只有返回的数据不同。

因此,显然,业务可以成为用户或其他任何东西。所以,经过这么长时间的阐述,我对各位观众的问题是,在这种情况下,如何防止代码重复?我已经尝试过使用接口,但我仍然在为 Go 的面向对象性质而苦苦挣扎,所以我真的很乐意提供任何帮助。


MM们
浏览 145回答 1
1回答

忽然笑

你可以做一些事情来减少代码重复,但不幸的是,你总是会在 go 中编写一些样板,因为它有明确的错误处理和缺乏 OOP 性。(这不一定是坏事!)。因此,我目前唯一的建议是将通用功能放在中间件处理程序中并稍微重构您的代码,例如:parseIdMiddleware := func(c *gin.Context) {  id, err := strconv.Atoi(c.Param("id"))  if businessID == 0 || err != nil {    c.AbortWithError(http.StatusBadRequest, errors.New("Missing ID"))    return  }  c.Set("id", id)}...gin.Use(gin.ErrorLogger(), parseIdMiddleware)并将您的处理程序重写为func GetBusiness(c *gin.Context) {  id := c.MustGet("id").(int)  business, err := store.GetBusiness(id)  if err != nil {    c.AbortWithError(http.StatusBadRequest, err)    return // don't forget this!  }  c.JSON(http.StatusOK, business)}和往常一样,阅读其他人的代码!我推荐https://github.com/drone/drone。这应该让您对如何构建代码有一个很好的概述。
随时随地看视频慕课网APP

相关分类

Go
我要回答