go的函数式选项模式

package main

import "fmt"

// 函数式选项模式(灵活使用默认值,又不影响对元素的修改)

type Option struct {
	A string
	B string
	C int
}

// 1、定义一个Options函数类型
type Options func(*Option)

// 2、利用闭包为每个字段编写一个设置值的With函数:
func WithA(a, b string) Options {
	return func(o *Option) {
		o.A = a
		o.B = b
	}
}

func WithC(c int) Options {
	return func(o *Option) {
		o.C = c
	}
}

// 3、我们定义一个默认的Option
var defaultO = &Option{ // 指针消耗少
	A: "A",
	B: "B",
	C: 100,
}

// 创造新的构造函数
func NewOptions(opt ...Options) (o *Option) {

	o = defaultO
	for _, O := range opt {
		O(o)
	}

	return o
}
func main() {
	o := &Option{"a", "b", 1}
	fmt.Println("o>>:", o)
	//
	o1 := NewOptions()
	fmt.Println("o1:>>", o1)
	o2 := NewOptions(WithA("AA", "BB"), WithC(1000))
	fmt.Println("o1:>>", o2)

}

输出结果如下:

o>>: &{a b 1}

o1:>> &{A B 100}

o1:>> &{AA BB 1000}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值