1,參考資料:Functional Options in Go: Implementing the Options Pattern in Golang
成都創(chuàng)新互聯(lián)專注于米脂企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。米脂網(wǎng)站建設(shè)公司,為米脂等地區(qū)提供建站服務(wù)。全流程專業(yè)公司,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)2,例子:求a,b,c的和
// go 函數(shù)參數(shù)沒有默認(rèn)值的語法,那我此時想給b添加默認(rèn)值該怎么辦?
func sum(a int, b int, c int) int {
return a + b + c
}
// 還有很多方法可以做到,但是我還是喜歡這種
// 定義包含全部參數(shù)的 struct
type Params struct {
a int
b int
c int
}
// 定義一個函數(shù)簽名
type ParamsOption func(*Params)
// 針對每個成員實現(xiàn)上面的簽名
func WithA(a int) ParamsOption {
return func(Params *Params) {
Params.a = a
}
}
func WithB(b int) ParamsOption {
return func(Params *Params) {
Params.b = b
}
}
func WithC(c int) ParamsOption {
return func(Params *Params) {
Params.c = c
}
}
// 很多開源項目用的都是此類方式。。。
// 構(gòu)造 參數(shù)結(jié)構(gòu)體 Params
func NewParams(options ...ParamsOption) *Params {
// 這里就是默認(rèn)值了
const (
a = 0
b = 0
c = 0
)
x := &Params{
a: a,
b: b,
c: c,
}
for _, o := range options {
o(x) // 這里就是在改你的默認(rèn)值了
}
return x
}
// 那要怎么使用?
// 先改一下例子吧
func sum(params *Params) int {
return params.a + params.b + params.c
}
// 然后可以這么用
// 你傳遞哪個With函數(shù)就會修改哪個默認(rèn)值執(zhí)行操作
Sum := sum(
NewParams(
WithA(1),
WithB(2),
WithC(3),
)
)
// 結(jié)束了
3,無
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧