首页后端开发其他后端知识什么是GO函数式选项模式,优缺点有哪些

什么是GO函数式选项模式,优缺点有哪些

时间2024-03-26 09:24:02发布访客分类其他后端知识浏览1549
导读:今天这篇给大家分享的知识是“什么是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
ES6数组新增方法知识点有哪些? 哪些核心知识点,前后端沟通必须掌握的呢?

游客 回复需填写必要信息