• bearlu
    2022-02-09
    老师,GO的实现泛型方式是跟C++一样?编译时进行?

    作者回复: 可以确定:编译时对泛型做的处理。但go使用的是一个hybrid方案,我也没太深挖。后续深挖后,再给大家分享。

    共 4 条评论
    3
  • Rayjun
    2022-02-18
    白老师太强了,能够把复杂的问题通过简单的方式讲述出来,太值得学习了

    作者回复: 谬赞了😁

    
    2
  • lesserror
    2023-08-02 来自广东
    Tony bai 老师,有几个小问题: 1. 类型参数是在函数声明、方法声明的 receiver 部分或类型定义的类型参数列表中,声明的(非限定)类型名称。 这里的非限定应该怎么理解呢?我的理解是命名可以随意。 2. 文中:“根据 Go 泛型的实现原理,上面的泛型函数调用 Sort[book](bookshelf)会分成两个阶段。” 这里(bookshelf)里面有一个链接,但是链接打开的是极客时间首页,不知道这里原意是什么。 3. 用类型参数替换接口类型通常也会让数据存储的更为高效。 这里为什么变高效了?能大致讲讲吗?

    作者回复: 1. 不是命名,是类型限定。可以是非限定的any之类的。当然也可以是限定的,比如comparable。当然这篇写的比较早,这块可以去掉“非限定”这个括号中的定语。 2. 那应该是极客时间编辑器从markdown转换文字时的问题。 3. 可以看看泛型篇的最后一讲。并对比interface在runtime层的表示原理。

    
    1
  • 左耳朵东
    2023-07-26 来自广东
    1、"没有必要像下面代码中这样使用一个类型参数像调用 Read 方法那样去从一个值中读取数据" 这里没看明白。 2、不考虑使用效果的话,能用泛型的地方好像都能用接口替换,反之也是,有点难以区分。 3、可不可以这样理解,如果某个功能只有一种实现方式,但是可以用在多种数据类型上,就用泛型;如果某个功能有多种实现方式(用不同的数据类型,会导致实现方式有差别),最好用接口。比如 io.Read 要求可以读文件 I/O 也可以读网络 I/O,它们各自的实现方式其实不一样,最好用接口而不是泛型。

    作者回复: 问题1 本来直接用接口类型即可,没必要在用接口类型作为constraint类型,用泛型没有任何额外好处,反增加了复杂性。 关于when用泛型,41讲说的更全面细致,可去读读。

    
    1
  • coming
    2023-02-07 来自上海
    习惯了C++的泛型, 看着[](), 有点懵

    作者回复: 的确需要适应一段时间。

    
    1
  • 雪飞鸿
    2022-09-11 来自江苏
    go团队没有找安德斯•海尔斯伯格聊聊~
    
    
  • 总有刁民想害朕
    2022-04-24
    泛型支持依赖注入就好了
    
    