zoukankan      html  css  js  c++  java
  • go语言设计模式-函数式选项模式

    go语言设计模式-函数式选项模式

    • 我们先定义一个结构体

      type Option struct {
      	A string
      	B string
      	C int
      }
      
    • 我们再定义一个人构造函数

      func newOption(a, b string, c int) *Option {
      	return &Option{
      		A: a,
      		B: b,
      		C: c,
      	}
      }
      
    • 我们定义一个OptionFunc的函数类型。

      type OptionFunc func(*Option)
      
    • 然后利用必报为每个字端设置With函数

      func WithA(a string) OptionFunc {
      	return func(o *Option) {
      		o.A = a
      	}
      }
      
      func WithB(b string) OptionFunc {
      	return func(o *Option) {
      		o.B = b
      	}
      }
      
      func WithC(c int) OptionFunc {
      	return func(o *Option) {
      		o.C = c
      	}
      }
      
    • 定义一个默认Option如下:

      var (
      	defaultOption = &Option{
      		A: "A",
      		B: "B",
      		C: 100,
      	}
      )
      
    • 编写我们新的构造函数

      func newOption2(opts ...OptionFunc) (opt *Option) {
      	opt = defaultOption
      	for _, o := range opts {
      		o(opt)
      	}
      	return
      }
      
    • 测试

      func main (){
      	x := newOption("jk","man",25)
      	fmt.Println(x)
      	x = newOption2()
      	fmt.Println(x)
      	x = newOption2(
      		WithA("liu"),
      		WithB("hello"),
      		)
      	fmt.Println(x)
      }
      
      &{jk man 25}
      &{A B 100}
      &{liu hello 100}
      
  • 相关阅读:
    JS相关
    简单的打字效果
    android文件保存
    android 各种布局技术
    Android中的显示单位
    第一个android项目目录结构说明
    安装运行第一个android应用
    android手机模拟器屏幕分辨率说明
    系统常用VC++运行时下载地址
    VC++共享文件夹
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13379016.html
Copyright © 2011-2022 走看看