文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

返回 Golang 中的联合类型

2024-04-04 23:56

关注

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《返回 Golang 中的联合类型》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我想尝试 golang 中的联合类型实现,如这个答案

我试试这个:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

type intOrString interface {
    int | string
}

func main() {
    fmt.Println(measure())

}
func measure[T intOrString]() T {
    rand.Seed(time.Now().UnixNano())
    min := 20
    max := 35
    temp := rand.Intn(max-min+1) + min

    switch {
    case temp < 20:
        return "low" //'"low"' (type string) cannot be represented by the type T
    case temp > 20:
        return T("high") //Cannot convert an expression of the type 'string' to the type 'T'
    default:
        return T(temp)

    }
}

那么我如何将“string”或“int”类型的表达式转换为“t”类型。


正确答案


您误解了泛型的工作原理。对于您的函数,您必须在调用函数时提供类型。像 fmt.println(measure[string]()) 一样,所以在这种情况下您希望从中获得 string 。如果您像 measure[int]() 那样调用它,那么您期望结果是 int 。但如果没有类型参数,则无法调用它。泛型适用于不同类型共享相同逻辑的函数。

对于你想要的,你必须使用 any 作为结果,然后检查它是字符串还是整数。示例:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    res := measure()
    if v, ok := res.(int); ok {
        fmt.Printf("The temp is an int with value %v", v)
    }
    if v, ok := res.(string); ok {
        fmt.Printf("The temp is a string with value %v", v)
    }
}

func measure() any {
    rand.Seed(time.Now().UnixNano())
    min := 20
    max := 35
    temp := rand.Intn(max-min+1) + min

    switch {
    case temp < 20:
        return "low"
    case temp > 20:
        return "high"
    default:
        return temp
    }
}

或者如果你只想打印出来(并且不需要知道类型),你甚至不需要检查它,只需调用 fmt.printf("the temp is %v", res)

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《返回 Golang 中的联合类型》文章吧,也可关注编程网公众号了解相关技术文章。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯