课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
相信大家在学习人工智能编程开发技术的时候应该有了解过go语言吧,今天我们就一起来了解和分析一下,go语言编程都有哪些优势和缺陷。
从理论的角度上来go是一门非常糟糕的语言,就算是和C++或者Ada之类旧语言相比也是这样。
它缺乏大量的编译时的检查和编译时的逻辑,它缺乏销毁逻辑导致许多样板文件和运行时错误。它的界面不是很有表现力。它具有一等公民数据结构(slices和maps),不能使用语言本身作为库进行复制。在许多不需要易变性的情况下,它强制用户进行易变性。它附带了一个伪依赖管理器,它缺乏独立项目的独立版本控制。与大多数其他流行的系统编程语言(即C、C++、Ada、Fortran和Rust)相比,它的速度非常慢。
这就是我现在能想到的,很容易就能给你们展示的东西。一旦你深入研究go,你会发现它会做出一些固有的错误设计选择,它是为1980年而不是2020年设计的语言。
尽管如此,就像任何曾经使用过go的人都能告诉你的那样,这是一种非常好的语言。如果我被困在一个只有三种编程语言的岛上,我想go会成为其中之一。
尽管存在所有的缺陷,但它允许您编写性能良好的相对无错误的代码。向Go程序添加依赖项通常比向C++程序添加依赖项要顺利得多。
为什么Go是棒的
这让我处于一个非常奇怪的位置。一方面,我可以谈谈Go有多可怕。另一方面,Go显然是一种非常好的语言。
为了弄清楚为什么是这样的,我们依然需要回到程序员解决问题的角度,把语言作为工具来看。
很多现代世界的问题看起来都是围绕着有效网络通信,围绕安全地利用所有硬件线程以及更容易的开发和部署展开的。
后,渐渐有了一个稳定的趋势,良好的开源库渗透到我们的生活中,其中大多数是简洁和简单,适合单一目的。大多数Node或Python项目都有数百个这样的依赖项,而大多数C和C++代码库都有十几个。C和C++缺乏任何标准化的包管理,因此库往往是无所不包的整体(参见QT和Boost),而它们添加新的依赖项非常耗时。
开源库是现代开发人员生涯中的重要组成部分,但所有流行的系统编程语言都缺乏包管理。
从这个角度来看,Go有一些中心特征,这些特征非常让人惊叹,以至于它们把所有不好的一面都掩盖了。
Go的实用程序允许您轻松下载和使用包。
静态编译使得在不同环境之间移植代码,并且可以很容易地建立开发环境。
本地异步I/O机制允许您可以轻松编写高性能的网络代码。
内置通道允许在[g|c]oroutines之间轻松实现和相对安全的数据传输。
标准库和包生态系统包含了开发人员能够需要的大多数库。
对于几乎所有的使用案例来,它“足够快”。似乎在如Python和Node这些易于使用的单线程语言,甚至是像C++和C这样的古老而又快速的庞然大物之间找到了一个佳位置。
或者,白了,Go是一种专为开源库,大规模并行和网络计算而设计的语言。
其他流行语言则缺少这三个类别中的一个。
Go的所有剩余问题源于三种设计选择:
垃圾收集,而不是为其所有资源定义编译时间的生命周期。这会损害性能,删除有用的概念(如移动语义和析构函数),并削弱编译时错误检查功能。
缺乏不可变性,除了少数(本机)类型之外。
缺乏泛型
若解决这些问题,Go无疑会成为未来的语言。但是,由于各种问题,有些与先前的设计决策有关,有些又与设计师的意见有关,其中大部分都未解决。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。