什么是GO函数式选项模式,优缺点有哪些
导读:今天这篇给大家分享的知识是“什么是GO函数式选项模式,优缺点有哪些”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“什么是GO函数式选项模式,优缺点有哪些”文章能帮助大家解决问题。...
今天这篇给大家分享的知识是“什么是GO函数式选项模式,优缺点有哪些”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“什么是GO函数式选项模式,优缺点有哪些”文章能帮助大家解决问题。Golang 开发者遇到的许多问题之一是尝试将一个函数的参数设置为可选. 这是一个非常常见的用例, 有些对象应该使用一些基本的默认设置来开箱即用, 并且你偶尔可能需要提供一些更详细的配置.
在很多语言中这很容易; 在 C 族语言中, 可以使用不同数量的参数提供相同函数的多个版本; 在像 PHP 这样的语言中, 可以给参数一个默认值,并在调用方法时忽略它们. 但是在 Golang 中, 这两种方式你哪个也用不了. 那么你如何创建一个函数, 用户可以指定一些额外的配置?
有很多可能的方法可以做到这一点, 但是大多数都不能满足要求, 或者需要在服务端的代码中进行额外的检查和验证, 或者通过传递额外的客户端不关心的参数来为客户端做额外的工作.
下面介绍GO 函数式选项模式(Functional Options Pattern),内容如下:
Option模式的优缺点
优点:
1. 支持传递多个参数,并且在参数个数、类型发生变化时保持兼容性
2. 任意顺序传递参数
3. 支持默认值
4. 方便拓展
缺点:
1. 增加许多function,成本增大
2. 参数不太复杂时,尽量少用
DEMO
package main import "fmt" type Client struct { Id int64 AppKey string AppSecret string } type Option func(*Client) // go函数的参数都是值传递 因此想要修改Client(默认值) 必须传递指针 func WithAppKey(appKey string) Option { return func(client *Client) { client.AppKey = appKey } } func WithAppSecret(appSecret string) Option { return func(client *Client) { client.AppSecret = appSecret } } // // NewClient // @Description 将一个函数的参数设置为可选的功能 // @param id 固定参数,也可以将所有都放进可选参数 opts 中 // @param opts // @return Client 返回 *Client 和 Client 都可以 // func NewClient(id int64, opts ...Option) Client { o := Client{ Id: id, AppKey: "key_123456", AppSecret: "secret_123456", } for _, opt := range opts { opt(& o) // go函数的参数都是值传递 因此想要修改Client(默认值) 必须传递指针 } return o } func main() { // 使用默认值 fmt.Println(NewClient(1)) // { 1 key_123456 secret_123456} // 使用传入的值 fmt.Println(NewClient(2, WithAppKey("change_key_222"))) // { 2 change_key_222 secret_123456} // 不按照顺序传入 fmt.Println(NewClient(3, WithAppSecret("change_secret_333"))) // { 3 key_123456 change_secret_333} fmt.Println(NewClient(4, WithAppSecret("change_secret_444"), WithAppKey("change_key_444"))) // { 4 change_key_444 change_secret_444} }
关于“什么是GO函数式选项模式,优缺点有哪些”的内容就介绍到这,感谢各位的阅读,相信大家对什么是GO函数式选项模式,优缺点有哪些已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 什么是GO函数式选项模式,优缺点有哪些
本文地址: https://pptw.com/jishu/653407.html