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

Go 与 泛型: 优点 or 缺陷

  •  2
     
  •   banxi1988 ·
    banxi1988 · 2017-02-08 09:26:18 +08:00 · 8661 次点击
    这是一个创建于 2637 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前看到 Go 中国 的文章: 为什么说 2017 年你必须要学习 Go 了

    其中把 Go 语言没有泛型作为其优点之一.

    昨天晚上看到新发的文章: Russ Cox 的 2017 年 Go 开发计划

    注: Russ Cox 目前是 Go Team 的 leader

    其中对于泛型有这么一两句话:

    我不相信 Go 团队曾经说过“ Go 不需要泛型”

    但我们确实明白,对于 Go 来说缺乏参数多态性是一个显著的障碍。

    这样看来, 在 Go 开发团队眼中, Go 没有泛型并不是一个优点啊.

    128 条回复    2017-02-13 20:01:55 +08:00
    1  2  
    jarlyyn
        101
    jarlyyn  
       2017-02-09 18:08:33 +08:00
    @noli




    @livid

    #99

    这人人生攻击没底线了
    noli
        102
    noli  
       2017-02-09 18:23:25 +08:00
    @jarlyyn

    golang 利用多值返回来传递 err 就是滥用特性的做法。 golang 使用者大规模地使用这种方式写代码,实际上就是在大规模地制造臭代码,制造有漏洞的软件。

    我对狗钻狗洞没有意见,我也对 gopher 出于解决问题写臭代码也没有意见。
    但非要说 golang 设计良好没有问题,我不赞同,就好像我不赞同出于和狗玩耍去钻狗洞这种行为一样。

    还不让人说不好?真是你弱你有理啊。
    jarlyyn
        103
    jarlyyn  
       2017-02-09 18:33:50 +08:00
    @noli

    或许你对别人说你是狗没意见,对不起,我有。

    你的理由建立在这是臭代码的基础上。

    可惜。我觉得你列出的两种方法,第二种比第一种好多了。

    你要说你觉得怎么样,是你的权利。

    但是针对,攻击其他和你观点不一样的人,就实在是太 LOW 了。
    l1093178
        104
    l1093178  
       2017-02-09 18:40:57 +08:00
    @noli golang 最蛋疼的地方是还有 nil...这都是 [billion-dollar mistake]( https://en.wikipedia.org/wiki/Null_pointer#History) 了, Rust 和 Swift 都消灭了这个问题,就只有 Golang 还保留了 null reference
    noli
        105
    noli  
       2017-02-09 18:42:02 +08:00
    @jarlyyn 你觉得被我针对,觉得我人身攻击你,觉得不开心,那你就 block 我。废话少说,要战便来战。

    欢迎你提出,为什么通过多值返回传递 err 会比 Either monad 好。
    我确实没见过这个立场的意见,你告诉大家,大家都会很开心的。
    jarlyyn
        106
    jarlyyn  
       2017-02-09 18:46:47 +08:00
    @noli

    首先, V2EX 是不允许人身攻击的

    https://www.v2ex.com/about

    所以,我需要做的是联系站长,而非 block 你,不要搞错,你自以为的一套逻辑对你而言可能觉得天大地大,可惜在我这里一文不值。

    和你战?对不起,暂时没发现你有这个资格。

    其次。我用的爽,所以传递 err 比另一种方式好。这就是最大的理由。

    你没见过的东西多了,我个人很为那些东西感到庆幸。
    noli
        107
    noli  
       2017-02-09 19:02:13 +08:00
    @l1093178

    Swift 其实真的很不错,我唯一觉得不顺眼就是没有 namespace
    可能是考虑到 Swift 为了兼容 OC 的 msg 机制
    考虑有两个 interface 位于不同的 namespace 下但是有同名的 msg ,这种问题它觉得没有把握能处理得好,所以不做 namespace 也是可以理解的。

    据说 Swift 4 之后打算开始 API 兼容了?
    aias
        108
    aias  
       2017-02-09 19:10:30 +08:00 via iPhone
    @noli 那人超能喷..朋友当心啊
    l1093178
        109
    l1093178  
       2017-02-09 19:23:41 +08:00
    @noli 对, 4.0 的主要目的就是源代码兼容性和稳定标准库的 ABI
    noli
        110
    noli  
       2017-02-09 19:40:38 +08:00   ❤️ 1
    @aias
    是在给我建议,还是指代我超能喷?
    后者的话谢谢你欣赏,我一向觉得既然都要嘴上交锋了,还要顾及什么喷子不喷子的评价,那真是活得不明白。
    前者的话,那我顺带总结(读音:吐槽)两句

    @jarlyyn 这个人在本帖里的事迹:

    一开始说 C# copy Java 。 #28
    我举出 C# 的独特特性, #34
    他又说不讨论特性 #36
    那好,说 C# copy Java 的根据是什么呢?

    又说,语言没有优劣之分,而 golang 试图在 C 的领域里面做得更好。
    我说 golang 不能写 GUI , C 起码还是有 GTK 的, golang 在这个方面没有贡献。暗示 golang 比不上 C #43
    后来纠结谁是某某语言吹,
    直到 #64 又来自说自话,语言没有好坏,只看场景。

    我深感遗憾,说了那么多浪费那么多时间,结果这人不看语言特性,看应用场景 golang 又被反驳,又来这句来说明语言没有优劣——其实就是重复自己的观点:语言没有优劣,但为神马,我不说。 #94

    其实他自己也承认,语言社区发展起来很大程度不一定因为特性,是要看因缘际会的。 #94
    这一点跟我的观点类似,譬如 docker 这样的重量级应用用 golang 来写是有偶然性的。

    但我认为这一点不能否认语言设计,如果是一门学科的话,那么这个学科是有道理可讲的。
    然后最后大家看到了,他的意思是不想听。

    综上,我觉得他就是来找碴的,道理不想听不理解对他来说等于没有。

    如果因为觉得我言辞激烈,认为我是个喷子,我不冤,因为我就是想激烈地反对无脑之人。燃烧激情的人生比死水一潭的人生有趣多了。我都三十好几的人了,保持这么中二不是我没开窍,而是我觉得这是快乐。

    像他那样,又拒绝交锋,又想自吹自擂。我只想说:不知所谓。

    来喷吧。
    aias
        111
    aias  
       2017-02-09 19:57:10 +08:00 via iPhone   ❤️ 1
    @noli 给你建议。这人以前经常参与撕逼,还故作高姿态
    jarlyyn
        112
    jarlyyn  
       2017-02-09 21:36:10 +08:00
    @noli

    首先,我 @27 楼的说的是

    “ c#作为一个 java 的 copy 者和竞争者”

    在我认为的一般语境下, copy 者是指用途,设计思想,功能,服务对象相似,实在和有没有独特的特性没关系。
    比如当年大家都认为马化腾的 Oicq 是 icq 的 copy 者和竞争者,尽管 Oicq 有在服务器上储存联系人的特性。
    比如当年大家都认为百度是谷歌的 copy 者和竞争者,尽管百度有盗版 mp3 在线播放的特性。
    你既然提出有特性是区分是不是 copy 的标准,那为什么不和#30 楼我说的那样,告诉我们为什么?

    你不说,我只能认为,你觉得你的想法就是天下真理。

    你在 42 楼提的提 C 的 GTK 库 CTK# 原话“做跨平台 GUI GTK#”,我就不明白你的点在哪了。 go 语言一样有 gtk 库啊?

    至于 C 能做 GTK,你还真没提过,因为如果你提了,我肯定会告诉你,好歹 go 还有过一个通过 opengl 接口做的 UI 库,虽然已经被放弃了。
    至于 golang 在 C 适用的场景里做的怎么样,我的原话如下:
    #38 "golang 不是一直目标是 Better C 么。有谁说 golang 和 C 是没关系的么"
    #46 "better C 本来就是试图在 C 用的场景上做的更好啊。 "
    #46 "至于 C 和 golang 哪个应用的更广泛,在大部分场景中更有优势,自然是 C 啊。"


    至于语言为什么没有优劣,我说的很清楚啊
    #82 “因为好或者坏不是一个客观范畴内的东西。

    这个世界本没有好与坏。

    只有你认为他好,或者认为他坏。

    而不同的人认定好坏的标准是不同的。”


    V2 是一个不能删贴修改的论坛,所有的帖子我有引用有出处,可以看看是不是这样。

    至于最后,我为什么不和你站,这也是我自己的问题啊。

    装比点说,因为傲慢与偏见啊。

    在我的眼中你是这样的:
    #97 “喷你一点爽快感都没有,因为你自认为不需要讨论更高层次的东西,我咋秀优越感呢。你自个儿玩得开心就好。我只对你吹的 golang 感兴趣,因为 golang 真的很适合用来暴露智商”
    需要靠用什么语言,喜欢什么语言才能秀优越感,妥妥的屌丝啊。

    #110 “都三十好几的人了,保持这么中二不是我没开窍,而是我觉得这是快乐"
    30 多岁了还只能靠语言来秀优越,真是看不到未来的屌丝啊。

    #110 ”是在给我建议,还是指代我超能喷?
    后者的话谢谢你欣赏,我一向觉得既然都要嘴上交锋了,还要顾及什么喷子不喷子的评价,那真是活得不明白“
    喜欢喷人,以喷人为荣的盆子,无法与人正常沟通又看不到未来的屌丝。

    不论我积累了怎么样暴烈的情绪,准备了怎么样刻薄的话语,看到这么一个 无法与人正常沟通又看不到未来的屌丝 ,都只能不受我理智控制完完全全的转换成了那浓浓的,浓浓的同情啊。

    这还让我怎么战?
    chingli
        113
    chingli  
       2017-02-09 22:01:47 +08:00 via Android
    这种讨论意义不大了,讨论对象比较复杂,每个人都有自己的理解。现在的问题是,好多人都只从自己的角度想问题,看到自己看到的美与丑。

    世界上没有最好的语言,我们也不可能有完美的语言,选个差不多的能解决问题就行了。说实在的,能拿来在这里辩论的都是好语言。你们是没用过其他行业真正让人想骂娘的语言。

    无论如何,不要人身攻击,维护社区气氛,否则上 V2 也没有意思了。不好意思,我故作高姿态了!
    noli
        114
    noli  
       2017-02-09 22:22:32 +08:00
    @jarlyyn

    1. "copy 者是指用途,设计思想,功能,服务对象相似" 按你的理解,通用编程语言看来都是一样的了对吧?
    所以我指出,你总是回避讨论细节,你就没有资格认为语言说语言没有好坏。

    2. “因为好或者坏不是一个客观范畴内的东西。 这个世界本没有好与坏。”
    很明显我们不是在讨论哲学,不是在讨论世界,我们在讨论编程语言的特性和缺陷,你装什么高深呢?
    不想承认自己没货很丢脸的话,你闭嘴就好了。

    3.
    我傲慢是因为是恃才傲物。
    我有干货。
    你除了一直在评论我的为人之外,显得你很有洞察力之外,我没看到为什么不应该对你有傲慢——谁叫你没货。

    来啊,有别的本事使出来。

    说我傲慢我疯子我神经病我也认了。
    不想招惹疯子你就闭嘴,就这么简单。
    jarlyyn
        115
    jarlyyn  
       2017-02-09 22:37:38 +08:00
    @noli

    1.我的意思是通用编程语言看来怎么样根本就不重要,我也不关心,我不看细节,只看结果。
    如果结果都不重要,那这个世界就没什么更重要的了。

    2.大部分情况下,特性本身就是缺陷,缺陷本身就是特性。可惜你讨论的并不是特性与缺陷,而是试图判断一门语言好或者不好。

    3.别的不说,你的确很难和人正常沟通。

    我才是傲慢,正在对你偏见。

    你?我只有同情。

    真的不关心你到底怎么样怎么想。
    a3358387
        116
    a3358387  
       2017-02-09 23:07:31 +08:00
    顶一下。
    noli
        117
    noli  
       2017-02-09 23:10:43 +08:00
    @jarlyyn

    1. 所以说白了,就就不是在讨论语言优点啊缺陷啊,什么的。
    你需要的只是你说,做 XXX 项目我用了某某某语言。
    至于为什么用,不为什么,就因为我喜欢,我觉得好用,我学了,我听说他好用……
    you don't even try to be helpful.

    你不是重视结果,你只是反理性。

    2. “大部分情况下,特性本身就是缺陷,缺陷本身就是特性”
    别在玩弄你的概念偷换大法了。

    golang 有 interface 就是有缺陷,没有泛型就是没有缺陷。是不是啊?

    当然你也说了,懒得跟我说。
    没事,本来我的目的只是希望大家别听你胡扯。你不用特地告诉我,我人好,还是希望你多分享。

    3. 就算你我傲慢与否对会有偏见,只不过我选择展示我的偏见
    而你希望假装没有。

    好了,不跟你玩了,已 block 。
    a3358387
        118
    a3358387  
       2017-02-09 23:13:18 +08:00
    继续!!!
    ptyfork
        119
    ptyfork  
       2017-02-10 16:45:01 +08:00
    多返回值返回 error 我觉得挺好用的,楼上几位喷了么多。。。
    但是 go 自己标准库对 error 使用真是很烂,前面提到的判断网络连接是不是被重置了,居然要用字符串匹配。
    situs
        120
    situs  
       2017-02-10 18:21:55 +08:00
    题主一脸懵逼:有人能只说说 go 与泛型的不,我好像没问 c#。。
    Balthild
        121
    Balthild  
       2017-02-11 15:03:54 +08:00
    @noli 只要有用 JS 写出了 OS 的例子,那「 JS 可以写 OS 」有何错误?
    同样,只要 golang 有至少一个非业务场合的应用(这里举的例子是 docker ),那「 golang 除了写 业务 server 之外,没有想到任何别的场合是能用的。 」这句话即被证伪了。
    Balthild
        122
    Balthild  
       2017-02-11 15:10:14 +08:00
    ↑不小心按了回复。
    上述论证基于以下定理:
    全称命题 ∀x∈M, p(x) 的否定命题是 ∃x0∈M, ~p(x)
    noli
        123
    noli  
       2017-02-11 15:39:32 +08:00
    @Balthild 证明 Docker 不属于业务 Server 的集合?
    Balthild
        124
    Balthild  
       2017-02-11 16:55:18 +08:00
    @noli docker 用于 CI 时本身不属于业务
    noli
        125
    noli  
       2017-02-11 20:38:01 +08:00
    @Balthild
    虽然不理解 Docker 为什么用于 CI 时不属于业务。但我相信这样的分类、标签问题不会有止尽。
    好了,我承认 golang 可以用于非业务 server 场合了。
    那请问你认为 golang 在哪些 非业务 server 的场合是一个好的工具呢?
    Balthild
        126
    Balthild  
       2017-02-13 18:45:12 +08:00
    @noli 还是刚才的例子, CI
    当然,你可以说这个场合下 docker 能被别的东西替代。
    noli
        127
    noli  
       2017-02-13 19:51:17 +08:00 via iPhone
    @Balthild 我说的是 golang 不是 docker
    Balthild
        128
    Balthild  
       2017-02-13 20:01:54 +08:00
    @noli 抱歉,看错了。
    我的回答是:我不知道
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2872 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:31 · PVG 08:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.