Go語言設計模式之函式式選項模式

2022-06-07 15:36:08 字數 1485 閱讀 5978

本文主要介紹了go語言中函式式選項模式及該設計模式在實際程式設計中的應用。

最近看go-micro/options.go原始碼的時候,發現了一段關於服務註冊的**如下:

type options struct

func

newoptions

(opts ...option) options

for_

, o :=

range opts

return opt

}

可能大家看到現在也不是很明白我說的問題到底是什麼,我把它簡單提煉一下。

我們現在有乙個結構體,定義如下:

type option struct

現在我們需要為其編寫乙個建構函式,我們可能會寫成下面這種方式:

func

newoption

(a, b string

, c int

)*option

}

上面的**很好理解,也是我們一直在寫的。有什麼問題嗎?

我們現在來思考以下兩個問題:

我們可能需要為option的字段指定預設值

option的字段成員可能會發生變更

我們先定義乙個optionfunc的函式型別

type optionfunc func

(*option)

然後利用閉包為每個字段編寫乙個設定值的with函式:

func

witha

(a string

) optionfunc

}func

withb

(b string

) optionfunc

}func

withc

(c int

) optionfunc

}

然後,我們定義乙個預設的option如下:

var

( defaultoption =

&option

)

最後編寫我們新版的建構函式如下:

func

newoption2

(opts ...optionfunc)

(opt *option)

return

}

測試一下:

func

main()

輸出:

&&&

這樣乙個使用函式式選項設計模式的建構函式就實現了。這樣預設值也有了,以後再要為option新增新的字段也不會影響之前的**。

推薦閱讀:

go 函式式選項模式

golang 設計模式之選項模式

有時候乙個函式會有很多引數,為了方便函式的使用,我們會給希望給一些引數設定預設值,呼叫時只需要傳與預設值不同的引數即可,類似於 python 裡面的預設引數和字典引數,雖然 golang 裡面既沒有預設引數也沒有字典引數,但是我們有選項模式 在這之前,首先需要介紹一下可變長引數列表,顧名思義,就是引...

go語言設計模式之工廠模式 位元組教育

工廠模式 factory pattern 是最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。在工廠模式中,建立物件時不會對客戶端暴露建立邏輯,並且時通過使用乙個共同的介面來執行新的建立的物件。乙個呼叫者想建立乙個物件,只知道物件名稱就可以了 擴充套件性高,如果...

go語言設計模式之命令模式 位元組教育

命令模式是將乙個請求封裝為乙個物件,從而使我們可用不同的請求對客戶進行引數化 對請求排隊或者記錄請求日誌,以及支援可撤銷的操作。命令模式是一種物件行為模式,其別名為動作模式或事務模式。乙個呼叫者想建立乙個物件,只知道物件名稱就可以了 擴充套件性高,如果想增加乙個產品,只要擴充套件乙個工廠類就可以 遮...