《使用Gin框架構建分散式應用》閱讀筆記:p88-p100

codists發表於2024-10-20

《用Gin框架構建分散式應用》學習第6天,p88-p100總結,總計13頁。

一、技術總結

1.MongoDB CRUD操作

(1)InsertOne(), InsertMany()

(2)Find()

(3)UpdateOne, UpdateMany()

(4)DeleteOne(), DeleteMany()

2.MongoDB primitive

p96,recipe.ID = primitive.NewObjectID() 中的 primitive 在 mongo-go-drive v2.0.0版中已經移除了。

二、英語總結

1.spaghetti code

第一次看到,記一下。spaghetti: u.pasta made in the form of long, thin strings義大利麵條), 長這樣:

深夜見不得這些,越看越餓。言歸正傳,spaghetti code就是“麵條程式碼”,具體參考維基百科:https://en.wikipedia.org/wiki/Spaghetti_code,瞭解下概念即可。

三、其它

聊一聊閱讀技術書籍經常遇到的一個問題。

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)暫時先跳過,提升閱讀進度。

如果沒有替代方法,那麼就先跳過,不可花過多時間在上面,因為有時候讀著讀著,你會發現這並不是最終的做法,但作者為了演示某個操作,講解某個知識點,而使用了它。雖然個人很不喜歡作者這種做法,但從閱讀過的書來看,很多時候確實會存在這種情況。

四、參考資料

1. 程式設計

(1) Mohamed Labouardy,《Building Distributed Applications in Gin》:https://book.douban.com/subject/35610349

2. 英語

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

歡迎搜尋及關注:程式設計人(a_codists)

相關文章