首页 > 其他分享 >优雅实现golang默认参数

优雅实现golang默认参数

时间:2023-06-01 10:22:05浏览次数:45  
标签:opt OperateRedis 默认 优雅 golang 参数 func

原生的golang中,函数定义不支持默认参数。但是在实际开发过程中,经常会有些参数用户可以不关心或者可以根据实际情况去定制实现,这个时候需要使用到默认参数,在C++中,函数的定义和实现本来就支持默认参数,如果需要在golang中实现默认参数,可以参考一下做法:

 

package main

import "fmt"

// 可以由用户自定义的参数集合
type Option struct {
	retryNum int
}

// 定义修改默认参数的钩子函数
type ModifyOptFunc func(opt *Option)

// 实际修改默认参数的函数
func WithRetryNum(num int) ModifyOptFunc {
	return func(opt *Option) {
		opt.retryNum = num
	}
}

func OperateRedis(modOptions ...ModifyOptFunc) {
    // 定义参数并添加默认值
	opt := Option{
		retryNum : 10,
	}

    // 调用钩子函数,并对默认值进行修改
	for _,fun := range modOptions {
		fun(&opt)
	}

    // 使用参数做相关实际逻辑
	fmt.Println("current retry number:", opt.retryNum)
}

func main() {
	OperateRedis()
	OperateRedis(WithRetryNum(1))
	OperateRedis(WithRetryNum(200))
}

  

标签:opt,OperateRedis,默认,优雅,golang,参数,func
From: https://www.cnblogs.com/gongxianjin/p/17448201.html

相关文章

  • golang vscode开发环境配置
    1.下载go安装包并安装官网下载地址2.下载vscode并安装官网下载地址3.安装vscodego语言开发扩展(插件)4.切换国内下载源,cmd输入如下代码goenv-wGO111MODULE=ongoenv-wGOPROXY=https://goproxy.cn,direct5.安装vscodego开发工具包windows下vscodeCtrl+Shift+P找......
  • 金融用户敏感数据如何优雅地实现脱敏?
    项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。sensitive提供了基于注解的方式,并且内置了常见的脱敏方式,便于开发。日志脱敏为了金融交易的安全性,国家强制规定对于以下信息是要日志脱敏的:用户名手机号邮箱......
  • 金融用户敏感数据如何优雅地实现脱敏?
    项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。sensitive提供了基于注解的方式,并且内置了常见的脱敏方式,便于开发。日志脱敏为了金融交易的安全性,国家强制规定对于以下信息是要日志脱敏的:用户名手机号邮箱......
  • golang之recover
    recover是什么golang的recover是一个内置函数,用于在发生panic时恢复程序的控制流。当程序发生panic时,程序会停止执行当前的函数,并向上层函数传递panic,直到被recover函数捕获。recover函数必须在defer语句中调用,否则无法捕获panic。如果没有发生panic或者没有被recover函数捕获,程序......
  • Lucene默认的打分算法——ES默认
    改变Lucene的打分模型随着ApacheLucene4.0版本在2012年的发布,这款伟大的全文检索工具包终于允许用户修改默认的基于TF/IDF原理的打分算法。LuceneAPI变得更加容易修改和扩展打分公式。但是,对于文档的打分计算,Lucene并只是允许用户在打分公式上修修补补,Lucene4.0推出了更多的打......
  • golang实现设计模式之抽象工厂模式总结-代码、优缺点、适用场景
    抽象工厂模式也是一种创建型的设计模式,其是在工厂模式的基础上实现更高程度的内聚。我们知道在工厂模式中,一种产品类就需要新建个对应的工厂类生成产品的实例,这会有什么问题呢?虽然工厂模式解决了简单工厂模式不好扩展的问题,实现了OCP,但一种产品就需要新建一个工厂类,比如有10000种......
  • Java实战-基于JDK的LRU算法实现、优雅的实现代码耗时统计(Spring AOP、AutoCloseable
    场景Java中基于JDK的LRU算法实现LRU算法-缓存淘汰算法-Leastrecentlyused,最近最少使用算法根据数据的历史访问记录来进行淘汰数据,其核心思想是:如果有数据最近被访问过,那么将来被访问的几率也更高在Java中可以利用LinkedHashMap容器简单实现LRU算法LinkedHashMap底层就是用......
  • golang实现设计模式之工厂模式总结-代码、优缺点、适用场景
    工厂模式也是一种创建型模式,它与简单工厂不同的是将实例的创建推迟到具体的工厂类方法中实现,每一种产品生成一个对应的工厂,从而替换掉简单工厂方法模式中那个静态工厂方法。所以在工厂模式中,不同产品就由不同的工厂生产,每次增加产品时,我们就不需要在类似在简单工厂中,在统一的工厂......
  • 【经验分享】锐捷EVE在火狐游览器中,取消一律打开此应用的选项,重新选择默认打开应用,如S
    环境:工具:锐捷EVE模拟器,火狐游览器,SecureCRT_8.7系统版本:Windows10需求描述:描述:在选择一律使用此程序打开应用后,找不到取消的地方,也因此无法更改打开的应用。提示:若按照教程还是无法完成操作,可以进入右侧的企鹅,找我看看,或者进哔哩哔哩自行查看视频教程。实现方法-......
  • < Python全景系列-9 > Python 装饰器:优雅地增强你的函数和类
    欢迎来到我们的系列博客《Python全景系列》第九篇!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法。无论你是编程新手,还是有一定基础的开发者,这个系列都将提供你需要的知识和技能。**装饰器在Python中扮演了重要的角......