百科问答小站 logo
百科问答小站 font logo



为什么 Go 语言如此不受待见? 第1页

  

user avatar   yuhengk 网友的相关建议: 
      

@Irons Du

, 不是为了反对他的答案,是因为基于这些问题,能解释 Go 不受待见的其中一个原因:Go 面对的问题和整个解决思路跟 Google 软件的规模相关,而这个规模是罕见的。20 亿行源码放在一个统一的代码库,全部主干提交,理论上代码库里任何两点都可以互相调用,几万个工程师(我是其中一名猪队友)在全球各个时区协同。

Why Google Stores Billions of Lines of Code in a Single Repository

. 这个设计前提导致了同样被黑得很惨的 C++ Style Guide (

The Philosophy of Google's C++ Code

) 和 Go 的一些看着很奇葩的设计点。

另外这个软件规模是一个问题,不是什么值得炫耀的东西。Go 为解决这些问题的设计,并不一定适合其他场景。回答这个问题本身,这里也不是说 Go 有多好,只是可以分享一些「为什么」,很有趣的设计权衡,例如 Quora 原文提到的 Go 几乎忽略了所有现代 PL 研究成果,但实际上这些成果在这个规模上还没能很好地工作。关于 Go 为什么是(或不是)系统编程语言的问题,我可以另外写一篇。

1:你能轻松知道哪些struct继承(实现)了哪些interface么?

能,Go guru.

2016-talks/slides.pdf at master · gophercon/2016-talks · GitHub

在超大软件库上一样很顺。显式 implements 声明上规模后会有问题,多余的依赖关系是其中之一,下面有关于依赖的更详细讨论。

2:你能轻松知道struct有哪些"成员函数"么?

能,godoc 啊

这两点正好说明了 Go 极端重视工具的设计思路,工具能解决大代码库上源代码级别无法解决的问题,比如全代码库索引、重构,计算改动影响范围触发集成测试等等。这里面也必须有权衡,例如,要为这个规模写编译器和各种工具,你最好别搞复杂的类型系统,不然事情会很困难。

3:手动维护defer能比RAII轻松?

RAII 很难。C++ destructor + exception, 这里的 exception 包括处理 destructor 的异常安全和 destructor 自己真的需要抛异常的情况。还有如果在 destructor 里放了重型操作,比如 flush 硬盘,defer 至少让你清楚地看到这种重操作会在哪里跑。这些问题当然都可以用很仔细的设计避免,但是在有几万个猪队友的时候,不要指望每个人都能做出好设计。

4:package只有一个层次

如果是指不能只 import 一个父节点而要显式 import 所有叶子节点。这是用来控制 dependency 的,不必要的 dependency 在大软件库是个严重问题。Go 奇葩的 import 多余 package 直接编译错误的规则也是这个目的。

5:访问控制只能限定在package之外。

个人体验,它省掉了很多语法规则,还工作得很好。有点不方便的是你看它 call 一个私有函数,但是在同一个文件里是找不到这个函数的定义的,它可能在同一个 package 的另一个文件里。这个是用工具补足的 —— 在内部的 code search 工具里我没感觉不方便,在 github 没有交叉引用的情况下看代码就比较郁闷。

6:基于源代码的开发(复用),这是否违背了以前书上说的实现隐藏(只暴露接口)?

没,主要是因为 Google 统一代码库,Go 一开始压根没考虑二进制库发布的问题。这跟软件工程的隐藏实现是两回事。依赖版本管理问题同理,因为统一代码库+全主干提交,这个问题在 Google 是不存在的…… 当然问题就是问题,现在外部使用越来越多他们也在逐步补锅了。

7:推崇error作为返回值是不对的。另外(panic+recover)对比下C++在C之上添加的异常处理(+RAII)的类型安全

推荐一篇微软 Midori 项目 (Rethinking the software stack) 语言 leader 的

Joe Duffy - The Error Model

(超长)。error 功能不够好,但 C++ 和 Java 的 exception 机制在上规模后也有无法解决的工程和性能的问题,Optional是好,但是语言就要变复杂,这里面有 tradeoff. 另外,「异常安全」是个看起来遵守规则写就可以的简单事情,但实际上非常困难,比如事务的回滚,文中也有专门描述。


user avatar   marsliu 网友的相关建议: 
      

感谢

@sxc

邀请。非常非常感谢。

为了防止邀请我的sxc老师撤销邀请,我不得不截图。


@朱峰女士,你的答案,为了防止你进行修改,我已经截图了。没错,如你问题当中所说,礼貌是不是软弱?

当然不是。

我自问是一个普通人,在知乎得到关注多,也只是因为我勤勤恳恳,一个字一个字写得多,仅此而已。

我去咕咚网之前,当过记者,做过公关,我也不是什么名校毕业,但是我深深知道,原创是品德,是节操。做记者,报道要如实,要客观,要中立,要还原事情的本来面目。

我为什么要在微信群“红包体育”里面和你抬杠,为什么要质问你,想必你已经不记得了,然而我记得清清楚楚。


我不关注你的微信号,那是有非常重要的原因的。朱峰女士,你说你没做过亏心事,那么想必在你看来,未经他人许可引用、转载他人原创的内容,不算是亏心事了。


你不记得的事情,我一点一点帮你回忆起来吧。事情当然没有这么简单。

当你加入“红包体育”的时候,我对群主说了一句话。【我很高兴,我有不删除任何聊天软件当中聊天记录的好习惯。】


这里截图当中的日期是一直就存在的。至今我的iPhone 4S也一直在用呢,不可能改掉。


你为什么和我说抱歉,你忘了?2015年3月3日你所说的,是真的都不记得了?


当时我的反应,算是很克制的了,毕竟当着“红包体育”群里这么多人的面。

为什么我过了这么久,才再次在“红包体育”群里质问你,我想你应该明白。我知道每个人做自媒体不容易,想靠着才华变现,更加不容易,当时你肯道歉,说你会改,那么我也就得过且过了。


问题的关键在于,你改了吗?如果你改了,你就不会不经过

@式微

同意,转载她的答案,而且还将她列为“第二作者”。

你的所谓声明,夹杂在你的正文内容当中,而不是正式开辟一个子栏目道歉,被诸多的信息噪声遮盖着,这就是你的诚意?

上述三张截图,是2015年6月17日早上8:43时截的。我现在还很怕诸多水军说我图片造假呢。下面两张图,是2015年3月3日晚上20:49时截的。那个时候,你的微信ID还没有“太阳表情”。

这个总不能说我作假了吧?



而你在面对我的质疑的时候,说了些什么话,你还记得吗?这就是我为什么要截图的原因。

二次编辑加了些东西,就可以等同于你自己的原创,是吗?


事实证明我当初心一软得过且过,才是真的错误。


你说了“最初开时,格式内容混乱,但转载内容标明了作者”——我还是那句话:用了我的东西,问过我吗?

你说了“微信对于转载格式有了新要求后,我们也跟着学习,把之前来源不明的全部删除。之后再也没有出现不合规的转载“——来源不明?请看看截图,你自己说过的话,怎么就这么快忘了呢?”是从虎扑、知乎、直播吧很多来源的文章“,这还算是来源不明?

你说了“暴力行为冠以道德名义,缺又恰恰选择了一个认真做事的自媒体下手,无论是出于要稿费,还是炒作涨粉,都不会实现的”——暴力冠以道德的名义?我质问你,就是暴力,你不告而拿,拿了我的答案,也拿了知乎上别人的答案,这种偷窃行为,就是道德的?


另外,请弄清楚,到底谁在炒作?我只是把原文作者式微老师带到了“体育红包”群,让她自己和你说清楚,这就是炒作?式微维护自己正当权益没有成功,自己写了篇专栏,以正视听,这叫炒作?

你说了“另外。。。您在背后诽谤我的许多聊天截图我已经给了律师。我们没做亏心事,我们礼貌但不软弱,真的,用法律途径解决,只对我们单方面有利啊。但您若真的要这样苦苦相逼,请也不吝给我一个您的地址,给您去一封律师函”。


我在背后诽谤你?请把截图放出来,让知乎用户都看看,我到底怎么诽谤你了。


你没做亏心事?没做亏心事我会质问你为什么不经过我允许转载了我的内容?


说我苦苦相逼?到底谁逼谁?“咕咚-李旸”是我在“红包体育”群里的ID,那是因为之前说过要标清楚所在的企业、媒体和姓名,所以我这样写。


我再说一次:质问你,是因为你在知乎未经我许可,擅自转载和引用了我的内容;我质问你,是因为你在知乎未经式微老师的许可,擅自转载和引用了式微老师的内容。


知乎上的回答问题,是我业余时间所为,工作忙的时候我只能下班回答问题,晚上写公众号内容,或者把知乎的答案放到我自己的公众号上去。关于足球篮球的内容,和咕咚网没有一点关系,全部是我自己的业余创作。


而你,直接找到了咕咚创始人、CEO申波先生,也就是我的最高领导,去质问我的行为是代表咕咚,还是代表个人。


我在知乎的ID和个人说明写得清清楚楚,没有和咕咚有任何的关联。你没有经过我个人的允许,转载引用我在知乎的内容,被我质疑你转载了别人的内容,居然好意思说是“法律层面的诽谤”?居然还去和我供职的企业对质?


到底是谁苦苦相逼?


所谓认真做事的自媒体,是把知乎用户的文字答案,变成自己的声音和话语,放到视频当中去,是吗?


所谓认真做事的自媒体,是未经他人许可,擅自转载、引用他人在知乎的原创答案,是吗?



最后我很想问一句:你既然深知自媒体人的成长有多么不易,为什么你还要去做“未经许可,擅自转载和引用其他自媒体人的内容”这样的事情?


最后,是我放出的所有截图的具体信息。



我在这里声明:我是知乎用户李暘,在知乎的每一个答案,在知乎的每一篇专栏文章,不敢保证完美无缺,逻辑严密,没有错别字,但全部是我自己的原创内容,任何人未经我许可,转载、引用、抄袭我的答案,即为侵权行为。




  

相关话题

  在C语言中,math.h中定义的各种数学函数在电脑上具体是怎么实现的? 
  如果计算机是由中国人发明的,那么编程时写代码会是全中文吗? 
  编程语言为什么有变量类型这个概念? 
  如何学习Python,以及新手如何入门? 
  C语言的设计模式有哪些? 
  面向对象编程的下一阶段是什么? 
  将文件编译成某种代码,打印到A4纸上,这种想法是否可行? 
  我是不是应该放弃 C# 了? 
  如何向一个零基础的人,解释学习计算机编程的正确顺序和原因? 
  为什么 Go 语言把类型放在后面? 

前一个讨论
刷完算法导论和leetcode,能找到什么水平的工作?
下一个讨论
小时候想到的一个数学问题,现在还没有想明白,可能以后会越来越不明白,有哪位大牛可以帮我解答吗?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利