GoLang的wire框架使用例子


簡介

Wire 是一個輕巧的 Golang 依賴注入工具。它由 Go Cloud 團隊開發,通過自動生成代碼的方式在編譯期完成依賴注入。

Wire使用小例子源碼結構說明

├─demo1 基本用法
├─demo2 接口綁定
├─demo3 結構體值注入
└─demo4 對錯誤的處理

使用說明

安裝wire命令

go get github.com/google/wire/cmd/wire

這個只需要安裝一次就可以了,沒必要為每個項目都安裝一次。

基本概念

providerinjectorwire的兩個核心概念。

  1. provider是普通的go函數,用它來產生指定對象的。因而這類函數必須是有返回值的。
  2. injector是組織provider函數按依賴順序(不是參數傳入順序)生成對象的。此函數的最終目標是生成指定對象,因而必須要有返回值。但它的返回值是在代碼生成時確定,編寫injector函數時返回值可以任意指定。(參考各demo下的wire.go文件)

使用步驟

wire的使用大體上可以分為以下幾步。

1 編寫初始化函數

例:

// NewMessage 創建打招呼內容
func NewMessage() Message {
	return Message("Hi there!")
}

此函數初始化了一個Message結構體。這個函數的結果會作為下個函數的輸入。如果初始化函數與的輸入與輸出與其他初始化函數都沒關系,那么wire代碼生成失敗。

此類函數被稱為provider

2 組織初始化函數流程

例:

// InitGreeteEvent1 使用 wire 生成初始化代碼
func InitGreeteEvent1() Event {
	wire.Build(NewEvent, NewGreeter, NewMessage)
	return Event{} // 這里的返回值不重要。
}

此函數是組織一系列相關初始化函數的,並傳入wire.Build函數內進行代碼生成。

這種函數被稱為injector

這里有幾點需要注意:

  1. injector函數需要寫在wire.go文件內。雖然文件名並非強制使用這個,但wire工具生成的文件名固定為wire_gen.go,不想每次都改文件名就用這個吧。
  2. wire.go文件必須加入//+build wireinject注釋,且它與package xxx語句之間至少有一個空行。

3 生成代碼

這里倒沒什么好說的,命令行到指定目錄下執行wire命令就可以了。

官網上的例子都是在main包下,別太死板,這個命令是可以到處執行的。

具體功能的使用可以參考各案例demo。


免責聲明!

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



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