日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go 語言中怎么使用依賴注入?

來源: 責編: 時間:2024-04-02 17:24:08 267觀看
導讀1 、介紹在 Go 語言項目開發中,我們處理組件層級之間的依賴關系時,通常我們會先在依賴層級的代碼中實例化被依賴層級,然后調用它的方法,即依賴方需要主動獲取被依賴方。但是,當被依賴層級的代碼發生變化時,依賴層級的代碼也

1 、介紹

在 Go 語言項目開發中,我們處理組件層級之間的依賴關系時,通常我們會先在依賴層級的代碼中實例化被依賴層級,然后調用它的方法,即依賴方需要主動獲取被依賴方。S4b28資訊網——每日最新資訊28at.com

但是,當被依賴層級的代碼發生變化時,依賴層級的代碼也需要修改,耦合性比較高,代碼不方便擴展。S4b28資訊網——每日最新資訊28at.com

所謂依賴注入,即依賴方不再需要主動獲取被依賴方,而是被依賴方主動傳遞給依賴方。S4b28資訊網——每日最新資訊28at.com

本文我們介紹 Go 語言怎么使用依賴注入。S4b28資訊網——每日最新資訊28at.com

2 、Go 語言使用依賴注入

在 Go 語言中,怎么使用依賴注入呢?我準備以 clean arch 架構的代碼講解。S4b28資訊網——每日最新資訊28at.com

推薦讀者朋友們先閱讀我之前寫的一遍文章 「Go 語言整潔架構實踐」。S4b28資訊網——每日最新資訊28at.com

參照 Bob 大叔的一篇關于整潔架構的文章 The Clean Architecture,我們分 4 個層級:S4b28資訊網——每日最新資訊28at.com

  • Models
  • Repository
  • Usecase
  • Delivery

限于篇幅,本文主要介紹在 Go 語言中使用構造函數的方式實現依賴注入,讀者朋友們可以在留言區分享其它實現方式。S4b28資訊網——每日最新資訊28at.com

示例代碼:S4b28資訊網——每日最新資訊28at.com

// Models 層type Todolist struct { Id      int64  `json:"id"` Title   string `json:"title"` Status  int    `json:"status"` Created int    `json:"created"` Updated int    `json:"updated"`}type TodoListRepository interface { Create(ctx context.Context, t *Todolist) (err error)}type TodoListUsecase interface { Create(context.Context, *Todolist) (err error)}// Repository 層type mysqlTodoListRepository struct { Conn *sql.DB}func NewMysqlTodoListRepository(Conn *sql.DB) models.TodoListRepository { return &mysqlTodoListRepository{Conn}}func (m *mysqlTodoListRepository) Create(ctx context.Context, t *models.Todolist) (err error) { // ... return}// Usecase 層type todoListUsecase struct { todoListRepo models.TodoListRepository}func NewTodoListUsecase(t models.TodoListRepository) models.TodoListRepository { return &todoListUsecase{  todoListRepo: t, }}func (tl *todoListUsecase) Create(ctx context.Context, t *models.Todolist) (err error) { if t.Title == "" {  return fmt.Errorf("illegal parameter") } return tl.todoListRepo.Create(ctx, t)}// Delivery 層type TodoListHandler struct { TodoListUsecase models.TodoListUsecase}func NewTodoListHandler(r *gin.Engine, todoListUsecase models.TodoListUsecase) { handler := &TodoListHandler{  TodoListUsecase: todoListUsecase, } r.POST("/create", handler.Create) r.Run()}// main 函數func main() { conn, err := sql.Open(`mysql`, "root:root@tcp(127.0.0.1:3306)/todolist") if err != nil {  log.Fatal(err) } r := gin.Default() todoListRepository := mysql.NewMysqlTodoListRepository(conn) todoListUsecase := usecase.NewTodoListUsecase(todoListRepository) http.NewTodoListHandler(r, todoListUsecase)}

閱讀上面這段代碼,我們可以發現 Repository 層依賴數據庫驅動 conn,Usecase 層依賴 Repository 層,Delivery 層依賴 Usecase 層。S4b28資訊網——每日最新資訊28at.com

以 Repository 層和 Usecase 層為例,我們可以發現 Usecase 層通過構造函數 func NewTodoListUsecase(t models.TodoListRepository) models.TodoListRepository 將其依賴項 models.TodoListRepository 以參數的形式傳遞過來,并將其放入 todoListUsecase 結構體中。S4b28資訊網——每日最新資訊28at.com

所以,我們使用 Usecase 層的構造函數 NewTodoListUsecase 創建 Usecase 對象時,需要先使用 Repository 層的構造函數 NewMysqlTodoListRepository 創建 Repository 對象,并將其以參數的形式傳遞給 Usecase 層的構造函數 NewTodoListUsecase。S4b28資訊網——每日最新資訊28at.com

通過依賴注入的方式,可以有效降低組件層級之間的耦合性,方便代碼的擴展。比如示例代碼中 Repository 層的方法修改代碼,不會影響 Usecase 層的代碼。S4b28資訊網——每日最新資訊28at.com

3 、依賴注入工具

除了手寫依賴注入代碼,我們也可以使用依賴注入工具,開源社區有很多依賴注入工具,其中比較流行的主要有以下 3 個。S4b28資訊網——每日最新資訊28at.com

Google 開源的依賴注入工具 Wire[1],它是一個代碼生成工具,也就是說它是在編譯時自動生成代碼。S4b28資訊網——每日最新資訊28at.com

另外 2 個依賴注入工具是在運行時基于 Go 反射實現,分別是 uber開源的依賴注入工具 Dig[2] 和 facebook 開源的依賴注入工具[3]。S4b28資訊網——每日最新資訊28at.com

讀者朋友們可以根據實際開發中的需求,選擇合適的工具。S4b28資訊網——每日最新資訊28at.com

4 、總結

讀者朋友們可能已經發現,依賴注入實際上就是面向對象五大原則之一,依賴倒置原則的實現方式。S4b28資訊網——每日最新資訊28at.com

我們可以在 Go 項目開發中,使用依賴注入的方式,降低組件層級之間的代碼耦合性,使代碼更方便擴展。S4b28資訊網——每日最新資訊28at.com

參考資料

[1]Google 開源的依賴注入工具 Wire: https://github.com/google/wireS4b28資訊網——每日最新資訊28at.com

[2]uber開源的依賴注入工具 Dig: https://github.com/uber-go/digS4b28資訊網——每日最新資訊28at.com

[3]facebook 開源的依賴注入工具: https://github.com/facebookarchive/injectS4b28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-80900-0.htmlGo 語言中怎么使用依賴注入?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 實戰三個有趣案例,十分鐘入門Canvas

下一篇: 無需花一分錢:輕松獲取SSL證書的三種方法

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美极品在线观看| 欧美在线播放| 最新高清无码专区| av成人免费在线| 亚洲欧美一区二区三区久久| 欧美一级精品大片| 久久亚洲一区二区| 欧美日韩国产成人在线免费| 国产精品久久久久久av福利软件| 国产视频一区欧美| 亚洲精品乱码久久久久久蜜桃91 | 欧美日本一区二区高清播放视频| 国产精品久久久久久久app| 国产色综合天天综合网| 亚洲国产精品高清久久久| 亚洲视频www| 久久婷婷一区| 欧美性猛交一区二区三区精品| 国产精品尤物| 亚洲人在线视频| 午夜精品久久一牛影视| 蜜桃视频一区| 国产精品影院在线观看| 久久综合伊人77777麻豆| 欧美日韩精品免费观看视频| 狠狠色狠狠色综合日日五| a91a精品视频在线观看| 久久久久国产精品午夜一区| 欧美日韩在线观看一区二区| 精品91免费| 亚洲免费影视| 欧美韩国日本综合| 国产视频自拍一区| 一本色道久久综合| 久久午夜电影| 国产精品自拍三区| 99在线精品观看| 老司机亚洲精品| 国产欧美精品在线| 亚洲美女啪啪| 噜噜爱69成人精品| 国产日韩精品一区二区三区| 99热在这里有精品免费| 麻豆成人精品| 国产原创一区二区| 亚洲欧美日韩国产| 欧美三日本三级少妇三2023| 亚洲国产另类 国产精品国产免费| 欧美一激情一区二区三区| 欧美日韩综合| 亚洲美女电影在线| 奶水喷射视频一区| 韩日精品视频| 性做久久久久久免费观看欧美| 欧美日韩国产精品专区| 亚洲第一精品电影| 久久久国产精品一区| 国产精品自在线| 亚洲一区在线视频| 欧美午夜影院| 一区二区三区国产精华| 欧美激情一区二区久久久| 亚洲电影激情视频网站| 久久先锋影音| 黑人中文字幕一区二区三区| 午夜精品久久久| 国产精品视频网| 亚洲自拍另类| 国产精品免费久久久久久| 一本色道久久| 欧美日韩视频在线一区二区| 日韩视频免费观看高清在线视频| 欧美成人一区二免费视频软件| 伊人婷婷久久| 久久综合一区二区三区| 在线观看亚洲| 欧美成人免费播放| 亚洲日本免费电影| 欧美了一区在线观看| 亚洲免费观看在线视频| 欧美日韩精品不卡| 在线视频亚洲| 国产精品欧美日韩| 亚洲欧美在线免费| 国产日韩在线一区二区三区| 欧美中文字幕第一页| 国产伊人精品| 老司机67194精品线观看| 亚洲国产精品日韩| 欧美日本成人| 亚洲一级片在线看| 国产精品综合久久久| 久久av资源网站| 一区福利视频| 欧美国产一区在线| 一本色道久久综合亚洲精品婷婷| 欧美系列精品| 欧美一区二区视频在线| 精品91免费| 欧美韩日一区二区| 亚洲视频一二| 国产日韩在线一区| 久久综合九九| 日韩视频免费观看高清完整版| 国产精品sss| 久久激情五月婷婷| 亚洲国产高潮在线观看| 欧美激情一区在线| 亚洲一二三区在线| 国产性色一区二区| 你懂的国产精品| 一区二区电影免费在线观看| 国产精品视频一二| 久久深夜福利| 亚洲日本中文字幕免费在线不卡| 欧美日韩国产美女| 午夜欧美视频| 影音先锋日韩精品| 欧美人与性动交cc0o| 亚洲男人的天堂在线aⅴ视频| 国产亚洲精品激情久久| 美日韩精品免费| 亚洲天堂成人| 黄色一区二区在线观看| 欧美人成在线视频| 欧美一区视频| 亚洲精品视频免费观看| 国产精品久久久久久av下载红粉 | 亚洲精品免费网站| 国产精品高精视频免费| 久久精品一区二区| av成人免费| 韩日欧美一区| 欧美日韩中文字幕| 久久香蕉国产线看观看av| 99re6这里只有精品视频在线观看| 国产精品伦一区| 免费毛片一区二区三区久久久| 亚洲午夜精品久久久久久浪潮| 极品日韩av| 国产精品白丝jk黑袜喷水| 久久天天躁夜夜躁狠狠躁2022 | 亚洲影院污污.| 在线日本高清免费不卡| 国产精品vvv| 免费成人网www| 午夜亚洲激情| 亚洲精品美女久久7777777| 国产亚洲精品一区二555| 欧美日韩国产首页| 久久一本综合频道| 亚洲综合久久久久| 亚洲高清视频的网址| 国产乱码精品一区二区三区五月婷| 欧美成人69| 久久精品视频在线看| 亚洲视频免费在线观看| 亚洲国产精品尤物yw在线观看| 国产精品综合网站| 欧美日韩中文| 欧美黑人多人双交| 久久久激情视频| 亚洲欧美国产高清va在线播| 亚洲激情一区二区三区| 韩国女主播一区二区三区| 性做久久久久久久免费看| 亚洲精品一区中文| 激情成人中文字幕| 国产日韩av一区二区| 欧美视频一区在线观看| 欧美—级在线免费片| 久久亚洲不卡| 欧美伊人久久| 亚洲自拍16p| 一本色道久久99精品综合| 亚洲激情国产精品| 韩日成人av| 国产一区白浆| 国产欧美不卡| 国产精品久线观看视频| 欧美日韩小视频| 欧美精品一区二区三区蜜臀| 美女福利精品视频| 久久免费视频网| 久久九九精品| 久久成人免费日本黄色| 亚洲一区尤物| 亚洲图片欧美日产| 一区二区三区国产精品| 99伊人成综合| 一二三区精品| 一区二区三区四区五区精品视频| 日韩午夜激情电影| 亚洲蜜桃精久久久久久久| 亚洲精品国产精品乱码不99按摩| 在线日韩精品视频| 91久久久在线| 亚洲精品网站在线播放gif| 亚洲啪啪91| 日韩午夜电影av| 一本大道久久a久久精二百| 99精品久久免费看蜜臀剧情介绍| 亚洲日本aⅴ片在线观看香蕉| 亚洲欧洲精品一区二区三区|