美文网首页Golang语言知识库
知识分享之Golang——Golang1.18泛型的简单案例

知识分享之Golang——Golang1.18泛型的简单案例

作者: cn華少 | 来源:发表于2022-03-19 19:59 被阅读0次

    知识分享之Golang——Golang1.18泛型的简单案例

    背景

    知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。

    知识分享系列目前包含Java、Golang、Linux、Docker等等。

    开发环境

    • 系统:windows10
    • 语言:Golang
    • golang版本:1.18

    内容

    上一节我们分享了Go语言新版本1.18正式发布,其中我们比较关注的一个重大变化就是泛型的引入,本节我们就使用泛型进行编写一下小案例,安装1.18部分就不讲了,和之前版本大同小异,这个版本新增加了一个环境变量,可以参见官方文档说明。
    以下是本节的案例代码:

    func main() {
        Test("string")
        Test(123)
        Test(float32(12))
        Test(int64(321))
    }
    
    func Test[T any](str T) {
        fmt.Println(str)
    }
    

    上面是一个简单的泛型使用案例,这里有一个关键点any类型,官方代码注释如下:

    // any is an alias for interface{} and is equivalent to interface{} in all ways.
    type any = interface{}
    

    说白了它就是一个万能类型,等同于interface{}接口类型。其官方还提供了一个类型comparable

    // comparable is an interface that is implemented by all comparable types
    // (booleans, numbers, strings, pointers, channels, arrays of comparable types,
    // structs whose fields are all comparable types).
    // The comparable interface may only be used as a type parameter constraint,
    // not as the type of a variable.
    type comparable interface{ comparable }
    

    这个类型当我们需要进行一些比较时就需要用到它了,当然这两个你都不使用,也可以定义一个自己的类型,然后在声明函数时T类型设定为我们私有的类型即可,代码如下:

    type resultType interface {
        int | int64 | string | float32 | float64
    }
    
    func main() {
        Test("string")
        Test(123)
        Test(float32(12))
        Test(int64(321))
    }
    
    func Test[T resultType](str T) {
        fmt.Println(str)
    }
    

    好了本节我们就分享到这里,更多的使用方法后续我们再继续进行分享,请持续关注我,我将给大家带来更多的组件分享、知识分享、规范分享等干货内容。

    本文声明:
    88x31.png
    知识共享许可协议
    本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

    相关文章

      网友评论

        本文标题:知识分享之Golang——Golang1.18泛型的简单案例

        本文链接:https://www.haomeiwen.com/subject/exnbdrtx.html