《使用Gin框架构建分布式应用》阅读笔记:p88-p100-三、其它

时间:2024-10-20 07:40:47

聊一聊阅读技术书籍经常遇到的一个问题。

1.旧代码无法使用怎么办?

func NewRecipeHandler(c *gin.Context) {

    // 使用 MongoDB 示例

    // 反序列化

    var recipe Recipe

    if err := c.BindJSON(&recipes); err != nil {

       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})

       return

    }

    // recipe.ID = xid.New().String()

    recipe.ID = primitive.NewObjectID()

    recipe.PublishAt = time.Now()

    _, err := collection.InsertOne(ctx, recipe)

    if err != nil {

       c.JSON(http.StatusBadRequest, gin.H{"err": "Error while inserting a new recipe"})

       return

    }

    log.Println("insert successfully")

    c.JSON(http.StatusOK, gin.H{"recipe": recipe})



}

这里以mongo-go-driver的primitive为例。作者在写该书的时候,使用的是v1.4.5。而现在,mongo-go-driver的最新版本是v2.0.0,为了与时俱进,我们最好是使用v2.0.0版本。那么问题来了,在v2.0.0中primitive无法使用怎么办?下面实际个人的一些处理:

(1)使用搜索引擎查找原因,了解一些用法在实际项目中的使用情况。

这里吐槽一下ChatGPT,ChatGPT给出了貌似可行,实际也是无法运行的代码:package main

import (

    "go.mongodb.org/mongo-driver/v2/bson/primitive"

   "fmt"

)



func main() {

    id := primitive.NewObjectID()

    fmt.Println(id)

}

很遗憾,通过搜索引擎也没有看到其它人遇到这个问题,从这个结果来看,那么这种用法很可能在实际业务中根本没有人使用。这是我们要特别关注的地方,很多作者写书,因为作者未在实际项目中使用过,写出了一些demo项目,但这些代码在实际项目中往往无法使用,堪称“烂代码”。

(2)使用其它方式暂时替代,确保代码能运行。

假设确实没有找到原因,或者因为代码版本的问题无法使用,那么此时可使用其它方式进行替代,因为我们先要掌握整体情况。以primitive为例,

recipe.ID = xid.New().String()

// recipe.ID = primitive.NewObjectID()

(3)暂时先跳过,提升阅读进度。

如果没有替代方法,那么就先跳过,不可花过多时间在上面,因为有时候读着读着,你会发现这并不是最终的做法,但作者为了演示某个操作,讲解某个知识点,而使用了它。虽然个人很不喜欢作者这种做法,但从阅读过的书来看,很多时候确实会存在这种情况。