V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
szzhiyang
V2EX  ›  Go 编程语言

目前 Go 泛型的最佳解决方法是?

  •  
  •   szzhiyang · 2020-02-20 21:38:19 +08:00 · 8976 次点击
    这是一个创建于 1770 天前的主题,其中的信息可能已经有所发展或是发生改变。
    42 条回复    2020-05-06 15:42:57 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       2020-02-20 22:53:34 +08:00   ❤️ 1
    没有最佳,只有这个:interface{}

    不过一般人不写框架,其实需要用到泛型的地方很少了。
    secondwtq
        2
    secondwtq  
       2020-02-20 23:59:20 +08:00   ❤️ 2
    当然是有最佳的,就是换 Java
    rdZZZ
        3
    rdZZZ  
       2020-02-21 00:15:00 +08:00
    不是说 go2 会加上范型么,一致等着呢
    cmdOptionKana
        4
    cmdOptionKana  
       2020-02-21 00:21:26 +08:00
    @rdZZZ 传闻今年内实现
    Akkuman
        5
    Akkuman  
       2020-02-21 00:24:34 +08:00 via Android
    interface 加 reflect
    hst001
        6
    hst001  
       2020-02-21 00:43:46 +08:00
    不存在的,短期也不会实现,要么换语言要么忍
    halo117
        7
    halo117  
       2020-02-21 02:32:51 +08:00 via iPhone
    不存在的,短期内不要奢望这个特性,提高性能还是 go 开发团队首先要处理的,除非有一个能保证表达能力和性能的泛型方案出来,否则一直鸽着这个特性的
    Cbdy
        8
    Cbdy  
       2020-02-21 07:30:12 +08:00 via Android
    等 go2
    scnace
        9
    scnace  
       2020-02-21 08:24:40 +08:00 via Android
    自动生成
    opentrade
        10
    opentrade  
       2020-02-21 08:55:10 +08:00 via Android
    我等了一年,只能选择离开,唯一割舍不下的是 goroutine
    firemiles
        11
    firemiles  
       2020-02-21 09:33:35 +08:00
    想问下不支持函数重载,泛型怎么用,我常用泛型的场景就是函数重载支持多类型
    justfortest
        12
    justfortest  
       2020-02-21 09:43:56 +08:00   ❤️ 1
    最佳解决办法就是不用泛型。。。
    还是 python 爽啊,动态类型一时爽,一直动态一直爽
    darknoll
        13
    darknoll  
       2020-02-21 09:51:22 +08:00
    又不是自己写框架,用啥泛型啊,完全不需要
    rdZZZ
        14
    rdZZZ  
       2020-02-21 10:00:20 +08:00
    没泛型,interface 也不是不能用哈哈哈,只能等着了,而且泛型的需求好像也不是那么重要
    hankai17
        15
    hankai17  
       2020-02-21 10:07:00 +08:00
    用泛型的场景多吗?
    TangMonk
        16
    TangMonk  
       2020-02-21 10:10:59 +08:00
    写一些公用库或者框架的时候泛型满重要的
    ai277014717
        17
    ai277014717  
       2020-02-21 10:12:06 +08:00
    昨天写包装接口请求时遇到这个问题。好像只能用 interface{}解决 https://gist.github.com/Kila2/789a84167b6c012147f621776c78a718
    smallSoda
        18
    smallSoda  
       2020-02-21 10:35:17 +08:00
    基本没用过泛型,绝大部分场景用不到,如果实在是要用,建议换个语言。没必要逼的 go 支持这个特性,每个语言都有自己的适用场景,指望一个语言变成全能不太现实。
    salamanderMH
        19
    salamanderMH  
       2020-02-21 11:37:22 +08:00
    interface{}
    reus
        20
    reus  
       2020-02-21 11:54:05 +08:00
    要灵活可以用 reflect 包,基本就是门动态语言了
    要类型安全可以用代码分析和生成,有一点门槛
    泛型可以解决上面两个的一些缺点,但也没法替代
    Fitz
        21
    Fitz  
       2020-02-21 11:54:14 +08:00
    我宁愿多写几个一样的函数也不想看到 interface{} 满天飞
    useben
        22
    useben  
       2020-02-21 12:40:11 +08:00
    最终变成 c++?
    keepeye
        23
    keepeye  
       2020-02-21 12:43:46 +08:00
    没有代码洁癖 有没有泛型无所谓
    hongch
        24
    hongch  
       2020-02-21 12:44:17 +08:00
    @opentrade 喜欢 routine 为什么不用 kotlin 范型也有
    guonaihong
        25
    guonaihong  
       2020-02-21 13:09:04 +08:00
    interface{} 可以理解为运行时的泛型,这里有性能开销。
    编译时的泛型,一起坐等 go2 吧。
    Actrace
        26
    Actrace  
       2020-02-21 13:21:56 +08:00
    最后改着改着,突然发现这不就是 php 嘛。
    chuhemiao
        27
    chuhemiao  
       2020-02-21 13:40:02 +08:00
    @Actrace 然后号称世界上最好的语言吗 😄
    laragh
        28
    laragh  
       2020-02-21 13:58:58 +08:00
    PHP 原生可不支持这么高的并发。
    las917vki
        29
    las917vki  
       2020-02-21 14:08:26 +08:00
    interface 是 CPP 里面的 RTTI
    这是被所有 CPP 程序员看作垃圾的东西
    cabing
        30
    cabing  
       2020-02-21 14:10:26 +08:00
    比较废键盘。
    Actrace
        31
    Actrace  
       2020-02-21 16:42:41 +08:00
    @chuhemiao 目前好像是有这个趋势。不过这好像会导致战争。
    secondwtq
        32
    secondwtq  
       2020-02-21 18:44:14 +08:00
    @firemiles #11 泛型和重载有什么关系?
    Yoock
        33
    Yoock  
       2020-02-21 20:18:17 +08:00 via iPhone
    反射吧
    tikazyq
        34
    tikazyq  
       2020-02-21 20:32:14 +08:00 via iPhone
    反射
    afpro
        35
    afpro  
       2020-02-21 20:36:49 +08:00
    interface{} 最坑的是判断 nil 唉
    firemiles
        36
    firemiles  
       2020-02-22 04:45:02 +08:00
    @secondwtq #32 写泛型不就是在编译时为类型生成方法吗,既然如此同名方法不可避免,这个应该是大部分使用场景吧
    dhssingle
        37
    dhssingle  
       2020-02-22 09:29:45 +08:00 via iPhone   ❤️ 1
    换 C#
    lcj2class
        38
    lcj2class  
       2020-02-22 13:56:59 +08:00 via iPhone
    无脑 interface{} ,性能有要求用代码生成 go generate
    ice2neet
        39
    ice2neet  
       2020-02-24 15:38:45 +08:00
    换语言
    aliipay
        40
    aliipay  
       2020-03-04 12:45:47 +08:00
    希望楼主及有同样想法的尽早放弃这个想法
    notamail
        41
    notamail  
       2020-03-06 15:28:28 +08:00
    sunshinev
        42
    sunshinev  
       2020-05-06 15:42:57 +08:00
    如果明确自己想要的东西,那么一般用不到 interface{} 就是要费尽把 struct 定义好。 不过很 base 的 struct 可能会有 interface{} 来解析 web 的数据,比如像定义一个 type Ret struct { Code: int Data:interface{} }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:29 · PVG 00:29 · LAX 08:29 · JFK 11:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.