go依賴注入wire的使用

2021-10-08 04:11:12 字數 1859 閱讀 9805

**:

僅作跟人備份,瀏覽請看原文

專案規模小的情況下,是否有依賴注入框架問題不大,但是當專案變大之後,有乙個合適的依賴注入框架是十分必要的。通過調研,了解到的golang中常用的依賴注入框架主要有 inject  dig等等。但是今天要介紹的是wire,乙個編譯期實現依賴注入的框架。

步驟如下:

首先新增依賴

github.com/google/wire v0.3.0
然後編寫下面的例子

package main

import (

"fmt")

name string

score int}

return a.name}

type banana struct

func (b *banana) speak() string

type shop struct

func (s *shop) sail() string

func init1()

s := shop

return s}

func newb() *banana

return b}

name: "asdfasdf",

score: 0,

} return a}

func main()

上面的程式正常情況下是不能執行的, 會報錯。我們需要在main.go的同級目錄下建立乙個wire.go檔案,其中的內容如下:

}需要注意,這裡的第一行 // +build wireinject十分的重要,不能省略。

下面十分的重要。

在wire.go所在資料夾下執行wire命令(先要使用go mod download 和go mod vendor),這樣就會根據規則新建出物件間相互依賴的樹。

// code generated by wire. do not edit.

//go:generate wire

//+build !wireinject

package main

// injectors from wire.go:

func initializeshop() shop

如果其中的類關係或者建立函式有變化,可以直接使用命令 go generate進行重新生成。(當然也可以在ide中直接執行進行重新整理) 

最終的結構如下圖:

專案結構

最後,需要強調一下。

1、如果在建構函式中有相同的型別,比如,兩個struct都有乙個構造欄位string,那麼wire會在進行inject的時候報錯,我們需要做的是把其中的乙個string重新定義乙個型別,比如 type selfstring string,然後讓有歧義的string型別變換成selfstring,這樣就能夠成功注入了。

2、在生成wire_gen.go的時候,如果已經生成了檔案,並且本次沒有新增函式,initialize函式,那麼可以直接使用wire_gen.go 中的go generate進行重新生成。但是如果新增加了乙個類的注入過程,應該使用wire命令重新生成wire_gen.go檔案,注意要把

// +build wireinject

注釋掉,否則找不到對應的類。

go 依賴注入 哪個好 PHP的依賴注入 DI

php當中的依賴注入和控制反轉是面試中經常問到的問題。同時,很多框架中也使用到了這種設計模式,可能有很多小夥伴們對這兩個概念認識比較模糊,下面我就來給大家講講什麼是依賴注入。概念 是一種允許我們從硬編碼的依賴中解耦出來,從而在執行時或者編譯時能夠修改的軟體設計模式。說明 要想理解di 依賴注入 首先...

使用google wire注入依賴

google wire是golang的乙個依賴注入解決的工具,這個工具能夠自動生成類的依賴關係。package main import fmt time 採集函式 type f func 採集物件 type worker struct 採集模組 type beater struct newfunc ...

依賴注入有點 在 Xunit 中使用依賴注入

今天介紹乙個基於xunit和微軟依賴注入框架的 真正 的依賴注入使用方式 xunit.dependencyinjection,來自大師的作品,讓你在測試 裡使用依賴注入像 asp.net core 一樣輕鬆 在 xunit 測試專案裡新增對xunit.dependencyinjection的引用 d...