03 | Go 编程模式:Functional Options
陈皓
你好,我是陈皓,网名左耳朵耗子。
这节课,我们来讨论一下 Functional Options 这个编程模式。这是一个函数式编程的应用案例,编程技巧也很好,是目前 Go 语言中最流行的一种编程模式。
但是,在正式讨论这个模式之前,我们先来看看要解决什么样的问题。
配置选项问题
在编程中,我们经常需要对一个对象(或是业务实体)进行相关的配置。比如下面这个业务实体(注意,这只是一个示例):
在这个 Server 对象中,我们可以看到:
要有侦听的 IP 地址 Addr 和端口号 Port ,这两个配置选项是必填的(当然,IP 地址和端口号都可以有默认值,不过这里我们用于举例,所以是没有默认值,而且不能为空,需要是必填的)。
然后,还有协议 Protocol 、 Timeout 和MaxConns 字段,这几个字段是不能为空的,但是有默认值的,比如,协议是 TCP,超时30秒 和 最大链接数1024个。
还有一个 TLS ,这个是安全链接,需要配置相关的证书和私钥。这个是可以为空的。
所以,针对这样的配置,我们需要有多种不同的创建不同配置 Server 的函数签名,如下所示:
因为 Go 语言不支持重载函数,所以,你得用不同的函数名来应对不同的配置选项。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Go 编程模式:Functional Options 本文介绍了Go语言中流行的一种编程模式——Functional Options。文章首先讨论了配置选项问题,指出了在Go语言中由于不支持函数重载而需要使用不同函数名来应对不同配置选项的问题。接着介绍了使用配置对象的方案,以及Builder模式的应用。然后,重点介绍了Functional Options的使用方式,通过定义函数类型和一组函数,实现了高度整洁和优雅的对象配置方式。最后,总结了Functional Options带来的6个好处,并推荐读者在类似的代码中使用这种方式。 Functional Options的优点包括直觉式的编程、高度的可配置化、易于维护和扩展、自文档、易于上手以及消除了配置参数选择困难的问题。通过本文的阅读,读者可以快速了解Functional Options的使用方式及其优势,为提高代码的可读性和可维护性提供了有益的参考。 文章链接:https://studygolang.com/articles/34389
该试读文章来自《Go 语言编程模式实战》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(19)
- 最新
- 精选
- 小明通俗易懂给老师点赞,但是我还是想说下,为啥我觉得builder模式更好,因为输入点后,会有提示哪些with选项可以用,函数式的optional 就没有提示2021-01-09618
- 余先生嗨全天哈最幸福的人可以说是很经典的设计模式了,基本上所有的开源库都可以看到类似方式的处理配置,值得学习和借鉴。2021-01-2112
- Geek_2c36c4之前看过类似的代码,当时觉得很别扭,看不太懂,原来是这样啊!get了新知识。不过说实话,这个挺难理解的,"新来的人很容易上手" 这个优势不明显2021-01-148
- Geek_cd4ae5WithOption 让代码清晰明了~2021-01-194
- onmyway666,看到很多函数使用使用这种变参方式,一直不太明白啥意思,也没仔细研究过。今天终于明白了。2021-01-152
- codewu在项目经常用2021-01-101
- Direction讲得好棒啊,在看源码时,也有很多人模仿java的builder模式,Functional Options模式还是挺好的。2021-01-0911
- 橙子888打卡。2021-01-081
- 森林木这种方式确实很清晰 不过在思考一个问题,怎么防止这些函数被滥用,builder的模式可以保证只在构造阶段被使用。2023-06-04归属地:上海
- 陈麒文温故而知新2022-11-08归属地:福建
收起评论