高哲技术博客 高哲技术博客
首页
编程
爬虫
运维
硬件
收藏
归档
关于

嘉美伯爵

前途光明,无需畏惧
首页
编程
爬虫
运维
硬件
收藏
归档
关于
  • 架构

  • 思想

  • 语言

  • 设计模式

    • 创建型

      • 单例模式
      • 工厂模式
      • 建造者(生成器)模式
      • 原型模式
      • option设计模式
        • 函数式选项设计模式
          • 普通版本
          • 接口版本
        • 参考
    • 结构型

    • 行为性

    • 并发型

    • 汇总篇

  • 微服务

  • 数据分析

  • 人工智能

  • 区块链

  • 数据结构

  • 技术调研

  • 性能优化

  • 生产问题

  • 编程
  • 设计模式
  • 创建型
fovegage
2023-09-18
目录

option设计模式

# 函数式选项设计模式

1. 将参数抽离到option,通过with的形式按需扩展修改(这儿相当于java的函数重载)
2. 接口版本(如果参数过多,则应该使用接口版本apply,golang grpc库用了该模式)
1
2

# 普通版本

package main

type Option func(*Options)

type Options struct {
	name string
	age  int
}

func WithAge(age int) Option {
	// 外部传入修改
	return func(o *Options) {
		// 这儿相当于更新了Options 将传入的重新复制对age
		println(o.name, o.age)
		o.age = age
	}
}

func NewOptions(opts ...Option) *Options {
	o := &Options{
		name: "gage",
	}
	for _, opt := range opts {
		opt(o)
	}
	// 值传递
	println("modify:", o.age)
	return o
}

func testOption() {
	// https://www.liwenzhou.com/posts/Go/functional-options-pattern/
	opt := NewOptions(WithAge(29))
	println(opt.age, opt.name)

	age := WithAge(29)
	age(&Options{
		name: "gage",
	})

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 接口版本


1

# 参考

  • Go语言设计模式之函数选项模式 (opens new window)
#option
上次更新: 2023-09-18 14:12:21
原型模式
代理模式

← 原型模式 代理模式→

最近更新
01
token embed和postion embed
06-10
02
k8s pod日志排查问题
10-24
03
golang内部私服建设方案
10-21
更多文章>
Theme by Vdoing | Copyright © 2018-2025 嘉美伯爵 | 鲁ICP备20001560号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式