首页 > 后端开发 > Golang > 正文

这是泛型的有效用例吗?

PHPz
发布: 2024-02-06 08:10:12
转载
653人浏览过

这是泛型的有效用例吗?

问题内容

现在在我的代码中,我有一堆看起来像这样的重复工作。

type fp = func(arg1 string, arg2 int, arg3 []string) bool
func decorator(fp fp, arg1 string, arg2 int, arg3 []string) {
    // do some stuff prior to running fp
    res := fp(arg1, arg2, arg3)
    // do some other stuff depending on res
}
登录后复制

我的问题是,每次我想添加具有不同数量/类型参数的新 fp 类型时,我都必须重新定义此方法,因此我最终在代码中重新定义了装饰器 4-5 次,并且可能需要多做一点。我想用装饰器替换

type FP = func(a ...interface{}) bool
func Decorator(fp FP, argDetails interface{}) {
    // do stuff
    res := fp(a)
    // do other stuff
}
登录后复制

并让 fp 断言类型。但我不确定这是否会导致问题/是一个糟糕的用例,因为我已经看到很多关于不使用界面/会导致性能问题的内容。


正确答案


由于一些原因,泛型没有帮助,特别是泛型对类型有帮助,而对参数的数量没有帮助。就我个人而言,我会以不同的方式解决这个问题:

无阶未来模型擂台/AI 应用平台
无阶未来模型擂台/AI 应用平台

无阶未来模型擂台/AI 应用平台,一站式模型+应用平台

无阶未来模型擂台/AI 应用平台 35
查看详情 无阶未来模型擂台/AI 应用平台
func decorator(fp func()) {
    // do stuff
   fp()
    // do other stuff
}
登录后复制

使用闭包调用它:

var res sometype

decorator(func() {
    res = originalfunc(arg1, arg2, arg3)
})
登录后复制

它在调用站点上有点冗长,但它绝对适用于任何函数签名 - 任何数量或类型的参数以及任何数量或类型的返回值。它甚至可以与方法调用一起使用。听起来你可能正在根据结果做一些逻辑,所以你也可以:

func Decorator(fp func() bool) {
    // do stuff
   res := fp()
    // do other stuff
}

var res someType

Decorator(func() bool {
    res = originalFunc(arg1, arg2, arg3)
    return res
})
登录后复制

即使装饰函数具有比该 bool 更多的返回值,或者如果您想使用其他逻辑(例如,如果它返回一个错误,您想使用 != 转换为 bool),它仍然可以工作。 nil)。

以上就是这是泛型的有效用例吗?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号