從此篇文章開始,我們來陸續介紹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
的相互介面關係:
可以看出:commonsqlconn
和txsession
是真正實現的地方。先從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-zero
的sqlx
遮蔽了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 的一篇部落格。他在自己部落格中闡述了微服務六個特點 創業初期 很快完成後,找了家雲服務部署上線,開始了創業之路。規模擴大 這一階段存在著很多不合理的地方 做出改變 在程式設計的世界裡,最重要的是抽象能力,通過整理業務邏輯,抽象初公共的業務...