用go-zero 寫一個數據中台系統


最近發現golang社區里出了一個新星的微服務框架,來自好未來,光看這個名字,就很有奔頭,之前,也只是玩過go-micro,其實真正的還沒有在項目中運用過,只是覺得 微服務,grpc 這些很高大尚,還沒有在項目中,真正的玩過,我看了一下官方提供的工具真的很好用,只需要定義好,舒適文件jia結構 都生成了,只需要關心業務,

加上最近 有個投票的活動,加上最近這幾年中台也比較火,所以決定玩一下,

先聊聊中台架構思路吧,look 先看架構圖

中台的概念大概就是把一個一個的app 統一起來,反正我是這樣理解的

先聊用戶服務吧,現在一個公司有很多的公眾號,小程序,微信的,支付寶的,還有xxx xxx ,很多的平台,每次開發的時候,我們總是需要做用戶登陸的服務,不停的復制代碼,然后我們就在思考能不能有一套獨立的用戶服務,

只需要告訴我你需要傳個你要登陸的平台(比如微信),微信登陸,需要的是客戶端返回給服務端一個code ,然后服務端拿着這個code去微信獲取用戶信息,反正大家都明白,

我們決定,將所有的信息 弄到 配置公共服務中去,里面在存,微信,支付寶,以及其它平台的 appid ,appkey,還有支付的appid,appkey,

這樣就寫一套

--------------------------------------------------------------------------------------------

go-zerio:  https://github.com/tal-tech/go-zero

最后說說實現吧,整個就一個repo 

網關,我們用的是: go-zero的Api服務

其它它的是服務,我們就是用的go-zero的rpc服務

看下目錄結構

 

 

 

整個項目完成,我一個人操刀, 寫了1個來星期,我就實現了上面的中台系統;

最后說說遇到的坑吧:

grpc 本人第一次用,然后就遇到了,有些字符為空時,字段值不顯示的問題:

通過grpc官方庫中的jsonpb來實現,官方在它的設定中有一個結構體用來實現protoc buffer轉換為JSON結構,並可以根據字段來配置轉換的要求

跨域問題:

go-zero的設置了,感覺沒有效果,大佬說通過nginx 設置,后面發現還是不行,最近 ,強行弄到了一個域名下,后面有時間再解決

go-zero的sqlx 問題,這個真的費了很長的時間,

time.Time 這個數據結構,數據庫中用的是 timestamp 這個 比如我的字段 是delete_at 默認數庫設置的是null ,結果插入的時候,
就報了Incorrect datetime value: '0000-00-00' for column 'deleted_at' at row 1"}這個錯,
查詢的時候報deleted_at\": unsupported Scan, storing driver.Value type \u003cnil\u003e into type *time.Time"
后面果斷去掉了這個字段
字段上面加上 .omitempty 這個標簽,好像也有用,`db:".omitempty"`

其次就是這個  Conversion from collation utf8_general_ci into utf8mb4_unicode_ci,這個導致的大概原因是,現在都喜歡用emj表情了,mysql數據識別不了

最后發現是數據連接問題:

mysql這邊照樣按照原始的方式,將配置文件修改編碼格式
重新創建數據庫,並且設置數據庫編碼為utf8mb4 ,排序規則為utf8mb4_unicode_ci
(這樣的話,所有的表還有string字段都是這個編碼格式,如果不想所有的都是,可以單獨設置,這個不是重點.因為在navicat上都好設置,手動點一下就行了)
重點來了:golang中使用的是 github.com/go-sql-driver/mysql驅動,
將連接mysql的dsn:(因為我這使用的是gorm,所以dsn可能跟原生的格式不太一樣,不過沒關系,只需要關注charset和collation就行了)
root:password@/name?parseTime=True&loc=Local&charset=utf8
修改為:
root:password@/name?parseTime=True&loc=Local&charset=utf8mb4&collation=utf8mb4_unicode_ci

---------------------------------

mark

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM