Golang 選項模式(Option模式)

2022-08-15 07:18:12 字數 1288 閱讀 1847

option模式的專業術語為:functional options pattern(函式式選項模式)

option模式為golang的開發者提供了將乙個函式的引數設定為可選的功能,也就是說我們可以選擇引數中的某幾個,並且可以按任意順序傳入引數。

比如針對特殊場景需要不同引數的情況,c++可以直接用過載來寫出任意個同名函式,在任意場景呼叫的時候使用同乙個函式名即可;但同樣情況下,在golang中我們就必須在不同的場景使用不同的函式,並且引數傳遞方式可能不同的人寫出來是不同的樣子,這將導致**可讀性差,維護性差。

優點支援傳遞多個引數,並且在引數個數、型別發生變化時保持相容性

任意順序傳遞引數

支援預設值

方便拓展

缺點增加許多function,成本增大

引數不太複雜時,盡量少用

package main

// fixme : url

import "fmt"

type message struct

func (msg message) string()

func new(id, phone int, name, addr string) message

}type option func(msg *message)

var default_message = message

func withid(id int) option

}func withname(name string) option

}func withaddress(addr string) option

}func withphone(phone int) option

}func newbyoption(opts ...option) message

return msg

}func newbyoptionwithoutid(id int, opts ...option) message

return msg

}func main()

/* output

id:1

- name:message1

- address:cache1

- phone:123

id:2

- name:message2

- address:cache2

- phone:456

id:3

- name:message3

- address:cache3

- phone:789

*/

golang 設計模式之選項模式

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

選項模式 option

package main import fmt 使用場景,大量修改乙個結構體,增加字段值,初始化極其麻煩 引入option模式後,直接加乙個屬性和乙個函式就可以搞定 type message struct func msg message string func new id,phone int n...

Golang 設計模式

策略模式 strategy 簡介 策略模式 將演算法或操作抽象成實現共同介面 可以被替換的類,實現邏輯和具體演算法的解耦。將各種行為抽象成演算法,封裝演算法為物件 演算法實現共同介面,呼叫者呼叫時不考慮演算法具體實現,呼叫介面方法即可 呼叫者可隨時替換此演算法物件 應用場景 多個方法選擇一使用,且它...