首页 > 其他 > 详细

Go 选项模式:使用闭包实现选项模式

时间:2020-04-09 17:39:21      阅读:64      评论:0      收藏:0      [点我收藏+]

使用闭包实现选项模式:

package main

import "fmt"

//先定义一个结构体
type Stu struct {
	Name string
	Age  int
	Addr string
}

var (
	//设置Stu属性的默认值
	DefaultStu = &Stu{
		Name: "someone",
		Age:  0,
		Addr: "unknown",
	}
)

//使用闭包设置Stu的属性
func SetName(name string) func(*Stu) {
	return func(stu *Stu) {
		stu.Name = name
	}
}

func SetAge(age int) func(*Stu) {
	return func(stu *Stu) {
		stu.Age = age
	}
}

func SetAddr(addr string) func(*Stu) {
	return func(stu *Stu) {
		stu.Addr = addr
	}
}

type OptFunc func(*Stu)

//参数为SetXXX,因为闭包返回一个函数,
//然后再将stu的实例当做参数传入,完美的实现了该实例的属性的设置
func NewStu(opts ...OptFunc) *Stu {
	stu := DefaultStu
	for _, o := range opts {
		o(stu)
	}
	return stu
}

func main() {
	stu := NewStu()
	fmt.Println(stu) //&{someone 0 unknown}
	stu2 := NewStu(SetAddr("湖北"), SetName("波波"))
	fmt.Println("stu2 =", stu2) //stu2 = &{波波 0 湖北}

}

  

Go 选项模式:使用闭包实现选项模式

原文:https://www.cnblogs.com/flycc/p/12667932.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!