《用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)