Go微服務實踐之增刪改查

2021-10-11 15:55:12 字數 2545 閱讀 9958

從此篇文章開始,我們來陸續介紹go-zero開發乙個專案所需要的元件和開發實踐。

首先我們從model層開始,來說說go-zero的api以及封裝細節。首先model層連線的api集中在core/stores。我們先來看看操作mysql這類資料庫,api方法我們來到core/stores/sqlx,所以接下來用幾篇的文章總體介紹一下sqlx的使用和設計思想。

func main() 

// newusermodel,newuserlogic 類似

func newusermodel(conn sqlx.sqlconn, table string) *usermodel

}// nginxapi將logic注入到handle,同時繫結路由和handler

func nginxapi(ul *logic.userlogic) rest.route

}

總結一下:

newmysql建立資料庫連線

建立相應的model,並將連線傳入「相應的newmodel需要開發者編寫」

model是為上一層logic提供服務

logic注入到handler中,同時handler與路由繫結,開啟server

這樣model-logic-handler最簡單的結構就出來了。然後來看看在model層如何進行資料操作:

var userbuilderqueryrows = strings.join(builderx.fieldnames(&user{}), ",")

type user struct

func (um *usermodel) insert(user *user) (int64, error)

id, err := res.lastinsertid()

if err != nil

return id, nil

}func (um *usermodel) findone(uid int64) (*user, error)

return nil, err

}return &user, nil

}

上述就是最簡單的crud的結構:首先是構建model,然後操作model進行操作。

檔名作用

bulkinserter.go

批量插入

mysql.go

newmysql

orm.go

解析,序列化model的操作

sqlconn.go

抽象crud操作的介面

tx.go

事務操作

sqlconn.go的相互介面關係:

可以看出:commonsqlconntxsession是真正實現的地方。先從api的功能整體介紹一下:

api引數

作用exec(query, args...)

sql, sql引數

insert/update/delete

prepare(query)

sql預編譯sql

queryrow(&model, query, args...)

model, sql, sql引數

查詢一行資料同時賦值給「model」

queryrowpartial(&model, query, args...)

model, sql, sql引數

功能同上,但是select sql可以只選取model的部分column「映襯partial」

queryrows/queryrowspartial

同上查詢多行api

transact(func(session session) error)

事務操作

將引數中的操作用事務包裹,開發者只需專注引數中的函式編寫

go-zerosqlx遮蔽了go原生的sql操作,開發者只需關注sql編寫和業務封裝的資料物件,不需要像原生開發中需要手動prepare,賦值資料時scan。

本節只是簡略介紹了介面的相互關係以及開發者平時關注的api,下節將著重分析go-zero是怎麼幫你賦值資料,同時在併發大的情況下,如何不讓流量直接把你的資料庫打死

Go微服務實踐之增刪改查

從此篇文章開始,我們來陸續介紹go zero開發乙個專案所需要的元件和開發實踐。首先我們從model層開始,來說說go zero的api以及封裝細節。首先model層連線的api集中在core stores。我們先來看看操作mysql這類資料庫,api方法我們來到core stores sqlx,所...

微服務實踐歷程

微服務概念的出現已經有很多年了,有多少公司在真正使用微服務,今天就把我這幾年對微服務的一點感受和大家分享下 首先,在系統建立之初,有乙個問題,到底要不要按照微服務的架構來開始專案?這個時候如果我們是接觸的乙個比較熟悉的行業 熟悉的業務,或者說業務架構師對這一行比較了解,那麼可以考慮進行微服務的設計,...

微服務實踐 什麼是微服務

微服務是一種軟體架構風格,該詞 於martin fowler 的一篇部落格。他在自己部落格中闡述了微服務六個特點 創業初期 很快完成後,找了家雲服務部署上線,開始了創業之路。規模擴大 這一階段存在著很多不合理的地方 做出改變 在程式設計的世界裡,最重要的是抽象能力,通過整理業務邏輯,抽象初公共的業務...