[选项模式]

package main

import "fmt"

type OptionFunc func(*DoSomethingOption)

type DoSomethingOption struct {
a int
b string
c bool
} func NewDoSomethingOption(c bool, opts ...OptionFunc) *DoSomethingOption {
s := &DoSomethingOption{c: c}
for _, opt := range opts {
opt(s)
}
return s
} func WithA(a int) OptionFunc {
return func(s *DoSomethingOption) {
s.a = a
}
} func WithB(b string) OptionFunc {
return func(s *DoSomethingOption) {
s.b = b
}
} // 选项模式
func option() {
s := NewDoSomethingOption(false, WithA(100), WithB("200"))
fmt.Printf("选项模式数据:%+v \n", s)
}

更多设计模式

golang之设计模式的更多相关文章

  1. Golang 常见设计模式之单例模式

    之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式.单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在.根据这一特 ...

  2. Golang 常见设计模式之选项模式

    熟悉 Python 开发的同学都知道,Python 有默认参数的存在,使得我们在实例化一个对象的时候,可以根据需要来选择性的覆盖某些默认参数,以此来决定如何实例化对象.当一个对象有多个默认参数时,这个 ...

  3. Golang 实现设计模式 —— 装饰模式

    概念 "用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能" "动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活" 何时 ...

  4. Golang 常见设计模式之装饰模式

    想必只要是熟悉 Python 的同学对装饰模式一定不会陌生,这类 Python 从语法上原生支持的装饰器,大大提高了装饰模式在 Python 中的应用.尽管 Go 语言中装饰模式没有 Python 中 ...

  5. 【程序员的实用工具推荐】 Mac 效率神器 Alfred

    Alfred 是一款功能非常强大,能有效提升 Mac 电脑使用效率的神器.可以说有了 Alfred 你就基本上可以脱离鼠标实现各种操作.相比 Mac 自带的聚焦搜索,完全可以称得上拥有碾压性的优势. ...

  6. 面试官问:Go 中的参数传递是值传递还是引用传递?

    一个程序中,变量分为变量名和变量内容,变量内容的存储一般会被分配到堆和栈上.而在 Go 语言中有两种传递变量的方式值传递和引用传递.其中值传递会直接将变量内容附在变量名上传递,而引用传递会将变量内容的 ...

  7. 关于 GIN 的路由树

    GIN 是一个 golang 常用的 Web 框架,它对 API 比较友好,源码注释也很明确明确,使用起来快速灵活,还有极高的容错率.标题中的路由我们可以简单理解为在浏览器中输入的页面地址,而&quo ...

  8. 又拍云 Redis 的改进之路

    作为推出国内首创可编程 CDN 服务的专业云服务提供商,又拍云利用 CDN 边缘网络规模和性能,允许客户自定义编写规则来满足常用业务场景.而为了保证这些源数据,如边缘重定向.请求限速.自定义错误页面. ...

  9. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  10. golang设计模式-成员变量赋值

    常见golang的struct赋值有两种: 1)定义变量同时初始化 val := &Options{ UID:int(1), } 2)先定义变量,再赋值 val := new(Options) ...

随机推荐

  1. 《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据

    ️基础链接导航️ 服务器 → ️ 阿里云活动地址 看样例 → 摸鱼小网站地址 学代码 → 源码库地址 一.前言 我们已经成功实现了一个完整的热搜组件,从后端到前端,构建了这个小网站的核心功能.接下来, ...

  2. 【YashanDB知识库】update/delete未选中行时,v$transaction视图没有事务,alter超时问题

    问题现象 1.alter table修改表字段名,卡住,超时. 2.查看v$transaction事务视图,没有看到事务记录. 3.问题单:调整表结构时超时 问题风险及影响 无风险 问题影响版本 客户 ...

  3. containerd 拉取k8s.gcr.io/pause镜像i/o timeout

    由于k8s.gcr.io 需要连外网才可以拉取到,导致 k8s 的基础容器 pause 经常无法获取.k8s docker 可使用代理服拉取,再利用 docker tag 解决问题 docker pu ...

  4. 欢迎加入d3shop,一个DDD实战项目

    背景 整个<老肖的领域驱动设计之路>系列关于认知的核心部分已经基本闭环,但纸上得来终觉浅,还是需要通过实际操作来体会和验证我们的观点,接下来,我将通过一个实战项目来带着大家一起体验从需求到 ...

  5. 音视频FAQ(三):音画不同步

    摘要 本文介绍了音画不同步问题的五个因素:编码和封装阶段.网络传输阶段.播放器中的处理阶段.源内容产生的问题以及转码和编辑.针对这些因素,提出了相应的解决方案,如使用标准化工具.选择强大的传输协议.自 ...

  6. 为什么在EffectiveJava中建议用EnumSet替代位字段,以及使用EnumMap替换序数索引

    在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,在第37条中建议 用EnumMap替换序数索引,为什么? EnumSet 在EffectiveJava中的第 36条中 ...

  7. Project: Kill e

    接到上级任务,今天来暗杀 \(e\) 据说杀死 \(e\) 的方式就是把他算出来,好吧,现在我们还是来算一下 考虑使用如下代数式求解 \[e\ \text{site:baidu.com} \] 虽然我 ...

  8. 第43天:WEB攻防-PHP应用&SQL注入&符号拼接&请求方法&HTTP头&JSON&编码类

    #PHP-MYSQL-数据请求类型 SQL语句由于在黑盒中是无法预知写法的,SQL注入能发成功是需要拼接原SQL语句,大部分黑盒能做的就是分析后各种尝试去判断,所以有可能有注入但可能出现无法注入成功的 ...

  9. 记录JDK8到JDK17各个版本的更新重点

    虽然大多数公司还是用的JDK8但是也要去了解和学习一下新得东西 ## JDK8新特性(2014年初)(LTS版本) 1.Lambda表达式 2.函数式编程 3.接口可以添加默认方法和静态方法,也就是定 ...

  10. 如何创建免费版本的ABP分离模块?

    如何创建免费版本的ABP分离模块? 由于ABP最近官方大改革,我们打开ABP.IO 官方会发现通过Cli创建模板的时候不能创建Trered类型的了 就是创建一个分层的解决方案,其中Web和Http A ...