怎样用GO函数式选项模式
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,怎样用GO函数式选项模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Golang 开发者遇到的许多问题之一是尝试将一个
千家信息网最后更新 2026年11月02日怎样用GO函数式选项模式
怎样用GO函数式选项模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Golang 开发者遇到的许多问题之一是尝试将一个函数的参数设置为可选. 这是一个非常常见的用例, 有些对象应该使用一些基本的默认设置来开箱即用, 并且你偶尔可能需要提供一些更详细的配置.
在很多语言中这很容易; 在 C 族语言中, 可以使用不同数量的参数提供相同函数的多个版本; 在像 PHP 这样的语言中, 可以给参数一个默认值,并在调用方法时忽略它们. 但是在 Golang 中, 这两种方式你哪个也用不了. 那么你如何创建一个函数, 用户可以指定一些额外的配置?
有很多可能的方法可以做到这一点, 但是大多数都不能满足要求, 或者需要在服务端的代码中进行额外的检查和验证, 或者通过传递额外的客户端不关心的参数来为客户端做额外的工作.
下面介绍GO 函数式选项模式(Functional Options Pattern),内容如下:
Option模式的优缺点
优点:
1. 支持传递多个参数,并且在参数个数、类型发生变化时保持兼容性
2. 任意顺序传递参数
3. 支持默认值
4. 方便拓展
缺点:
1. 增加许多function,成本增大
2. 参数不太复杂时,尽量少用
DEMO
package mainimport "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}}看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
参数
函数
模式
语言
支持
内容
多个
客户
客户端
指针
方法
顺序
帮助
配置
不同
复杂
清楚
相同
个数
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
耶加雪菲
北京路客互联网科技有限公司
疫情对互联网科技公司影响
科技企业和互联网企业
金诺互联网科技
高科技与互联网
互联网科技英文翻译
镁科技互联网资讯平台
北京大学互联网科技怎么样
昭通云南众福互联网科技有限公司
科技互联网大厂
崇明区互联网教育科技诚信经营
华夏互联网科技业
宜昌元轩互联网科技有限公司
从那以后互联网科技有限公司
艺电能源互联网科技有限公司招聘
好易买互联网科技
青岛易易互联网科技
亚光科技低轨卫星互联网
数字科技和互联网金融哪个好
新华互联网科技学校
互联网与科技发展
银优互联网科技有限公司
欧洲十大科技互联网公司
中国航天科技大学国际工业互联网
互联网科技商业
高科技互联网发展前景如何
工业互联网山东科技大学
江苏互联网智能科技软件
青岛互联网科技园