文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Golang 泛型 - 在传递函数指针时不能使用类型代替相同类型

2024-02-06 11:05

关注

问题内容

我是 golang 新手,我正在研究以下结构:

type Flag[T any] struct {
    defaultValue interface{}
}

其中 T 可以是 intbool

我定义了以下函数:

func (f Flag[T]) GetVariation(val interface{}, getFunc func(v T) T ) T {
    inputVal := f.defaultValue.(T)

    return getFunc(inputVal)
}

当我尝试将上述函数用于各种数据类型(例如 bool)时,使用以下内容:

func (f Flag[bool]) GetBoolVariation(val bool) bool {
    return f.GetVariation(val, someFunc)
}

func someFunc(v bool) bool {
    return true
}

我收到以下错误消息:

cannot use someFunc (value of type func(v bool)  bool) as func(v bool) bool value in argument to f.GetVariation

该消息非常令人困惑,因为它说我不能将“X”用作“X”。你能帮我弄清楚我在这里做错了什么吗?


正确答案


首先,很难在这里衡量您的更大用例,但泛型可能不是最适合这里,因为您要进行运行时类型检查(例如 f.defaultValue.(T))。

其次,您似乎正在使用 go 1.20,这确实会产生一个令人困惑的错误:

https://www.php.cn/link/63e8e3643e7f7198858eef325b0600f9

cannot use someFunc (value of type func(v bool) bool) as func(v bool) bool value in argument to f.GetVariation

使用最新的 Playground 版本(截至撰写本文时为 go 1.21)会给出更详细的编译错误:

https://www.php.cn/link/2d1bcedd27b586d2a9562a0f8e076b41

./prog.go:14:29: cannot use someFunc (value of type func(v bool) bool) as func(v bool ) bool  value in argument to f.GetVariation

指示类型 bool 被指定的位置 (./prog.go:13:14) 源于类型约束。

因此,仅仅因为此类型约束 bool 与非泛型函数签名匹配:

func someFunc(v bool) bool {
    return true
}

并不意味着它是精确的编译匹配。

您可以使用这个人为的示例“解决”编译错误:

func someFuncFix[T any](v T) T {
    return v
}

func (f Flag[bool]) GetBoolVariation(val bool) bool {
    return f.GetVariation(val, someFuncFix[bool])

    // FYI: `return f.GetVariation(val, someFuncFix)` also works as the bool constraint could be inferred
}

但同样,我认为泛型可能不是适合您特定用例的最佳解决方案。

以上就是Golang 泛型 - 在传递函数指针时不能使用类型代替相同类型的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯