1. 程式人生 > 實用技巧 >GoLang的wire框架使用例子

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。