广告
返回顶部
首页 > 资讯 > 精选 >go语言的优势和劣势是什么
  • 131
分享到

go语言的优势和劣势是什么

2023-07-04 20:07:01 131人浏览 薄情痞子
摘要

这篇“Go语言的优势和劣势是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的优势和劣势是什么”文章吧。go语言的

这篇“Go语言的优势和劣势是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的优势和劣势是什么”文章吧。

go语言的缺点:1、技术路线选择导致的“性能劣势”,go属于GC编程语言,在一些性能超级敏感的场合,选择Go依然要慎重。2、表达方法单一”、显式的错误处理有点“过时”。3、最小版本选择MVS,背离主流。4、Go核心团队对语言演化的把控力十足,不是社区多数人赞同的就一定会被采纳而加入Go语言,导致在社区上有劣势,Go社区与Go核心团队有“裂痕”。5、功能孱弱。

每种编程语言都有自己的优势和劣势,Go也不例外,下面我们就来列举一下Go的那些“优势”和“劣势”:

Go优势

简单易学

Go语言语法简单,其中包含了类似C语言的语法。如果读者已经掌握了两到三门编程语言,那么学习Go语言只需要几天的时间。即使是一名刚入门开发者,花几个星期也能写出性能较高的Go语言程序。

自由高效

Go语言的编译速度明显优于 Java 和 c++,还拥有接近C语言的运行效率以及接近 PHP 的开发效率,可以说Go语言将运行效率和开发效率进行了完美的融合。

同时,Go语言还支持当前所有的编程范式,包括过程式编程、面向对象编程、面向接口编程、函数式编程。开发者们可根据需求自由组合。

强大的标准库

Go里面的标准库非常稳定并且丰富多样,包括网络、系统、加密、编码、图形等各个方面。尤其是网络和系统的库非常实用,使得开发者在开发大型程序时,几乎无须依赖第三方库。

部署方便

不需要使用虚拟机,Go语言的代码可以直接输出为二进制可执行文件。而且Go语言拥有自己的链接器,不依赖任何系统提供的编译器和链接器。因此编译出的二进制可执行文件几乎可以运行在任何系统环境中。

原生支持并发

Go语言是一种非常高效的语言,从语言层原生支持并发,使用起来非常简单。Go语言的并发是基于 Goroutine 的,Goroutine 类似于线程,但并非线程,是Go语言面向线程的轻量级方法。创建 Goroutine 的成本很低,只需几千个字节的额外内存。

通常一台普通的桌面主机运行上百个线程就会负载过大,而同样的主机却可以运行上千甚至上万个 Goroutine。Goroutine 之间可以通过 channel 实现通信。Goroutine 以及基于 channel 的并发性方法可最大限度地使用 CPU 资源。

稳定性强

Go语言拥有强大的编译检查、严格的编码规范和很强的稳定性,此外Go语言还提供了软件生命周期(如开发、测试、部署、维护等)的各个环节的工具,例如:go tool、go fmt、go test 等。

垃圾回收

在使用Go语言进行开发时,在内存方面开发者只需要关注内存的申请即可,并不需要关系内存的释放,因为Go语言内置了 runtime 来自动进行管理。虽然目前来说 GC(Garbage Collection,垃圾回收机制)不算完美,但是足以应付开发时遇到的大多数情况,使开发者可以将更多精力集中在业务上,同时Go语言也允许开发者对此项工作进行优化

Go的劣势

技术路线选择导致的“性能劣势”

众所周知,Go是带垃圾回收的编程语言,因此不管Go的STW(Stop The World)的时间有多么短,GC的延迟有多么的小,它依然属于GC类编程语言,和Java、C#属于一个阵营,同时天然与C、C++、Rust这样的手动管理内存、没有运行时GC负担的编程语言之间划清了界线。虽然Go语言的初衷是成为系统级编程语言,虽然Go的运行时性能可以满足99.99%的场合的需要,虽然百度的万亿流量[转发引擎BFE]、时序数据库[influxdb]、分布式关系数据库[TiDB]等性能敏感的项目都选择了用Go实现,但不能否认的是在一些性能超级敏感的场合,选择Go依然要慎重。

2 坚持自己的设计哲学所带来的“表达劣势”

1) “单一”的表达方法

很多从其他语言转到Go阵营的开发人员抱怨Go能玩的花样太少,套路不多,Go之所以表现出“表达劣势”,源于其设计哲学中的一个原则:“崇尚一个事情只有一个或少数几种写法”。这个原则不符合某些开发人员炫技的心理需求,于是Go就被诟病为是资质平平的程序员才会去用的语言。

[Go 1.18将加入泛型(类型参数)],这算是对此类“劣势”的一个“弥补”。不过对于我们这些对Go价值观和设计哲学认同已久的Gopher而言,我们十分担心大幅提高Go表达能力的[泛型]将成为奇技淫巧的“滋生地”。

2) “过时”的显式的错误处理

Go语言从诞生那天起就没有像C++、Java、python等主流编程语言那样提供基于异常(exception)的结构化try-catch-finally错误处理机制,Go的设计者们认为[将异常耦合到程序控制结构中会导致代码混乱]。Go提供了一种简单的基于错误值比较的错误处理机制,这“强迫”每个Go开发人员都必须显式地去关注和处理每个错误,经过显式错误处理的代码会更为健壮,也会让Go开发人员对这些代码更有信心。但这一设计哲学的坚持却被很多来自其他语言的开发者嘲笑为“过时”,被称为“半个世纪前的古老机制”。(笔者注:十九世纪70年代C语言诞生时采用的错误处理机制)

Go开发团队也曾“动摇过”,Go开发团队在发布Go2计划后曾发布过多版[Go错误处理的新机制草案]。Go社区也针对此问题做过长时间的讨论甚至是“争吵”,知名Gopher Dave Cheney发声、Rob Pike发声,著名Go培训师、《Go语言实战》联合作者之一的威廉·肯尼迪(William Kennedy)更是在Go团队try 提案公示之后,发表了对Go社区的公开信反对try方案,最终坚持Go设计哲学的一派占据了上风,try提案被否决,没有加入到[Go 1.13版本]中!

背离主流的“小众劣势”

Go早期设计的包依赖管理机制的确存在不小的“瑕疵”,这源于Google内部大单一代码仓库与基于主干的开发模型的影响。走出Google的Go语言听到了不同方面的声音,Go包管理机制长期无法满足社区的需求。于是先后出现了[vendor机制]、[dep]等对包依赖管理的改进尝试。

2018 年初,正当广大gopher们认为dep将“顺理成章”地升级为go官方工具链的一部分的时候,Go核心团队的技术负责人,也是Go 核心团队早期成员之一的Russ Cox在个人博客上连续发表了[七篇文章],系统阐述了Go团队解决“包依赖管理” 的技术方案: [vgo],即go module的前身。

vgo的主要思路包括:语义导入版本 (Semantic Import Versioning)、 最小版本选择 (Minimal Version Selection) ,这些都与当前主流编程语言的包依赖管理的规则相悖,尤其是[最小版本选择(MVS)],算是另辟蹊径,背离主流!

Go核心团队的“民主集中制”导致的“社区劣势”

和Rust团队广泛采纳社区建议“猛加语言特性”不同,Go像是另外一个极端:Go核心团队对语言演化的把控力十足,不是社区多数人赞同的就一定会被采纳而加入Go语言,我这里将其戏称为“民主集中制”吧,即真正的投票权其实在Go核心团队的代表社区的少数人手中。

2018年初的dep与vgo之争就是这一“劣势”的典型表现。社区费劲一年多努力精心打造的dep项目被Russ Cox等少数人集中花掉一些时间设计出的vgo给“挤出”了Go包依赖管理工具标准的位置,成为了Go module成功的“垫脚石”。即便最终证明Go团队使用go module的决策的结果是正确的,但 这导致的Go社区与Go核心团队的“裂痕”是确确实实存在的,以致于这两年Go核心团队极力改善与Go社区的关系,规范化和透明化Go proposal的提出、review和接纳流程。

全面出击失败后,期望的落空导致的“功能孱弱劣势”

Go 1.5发布之后,由于实现了自举和GC延迟的大幅下降,Go受关注程度逐渐升高,直至2017年初第二次拿到TIOBE年度最佳编程语言,让Go语言有些“膨胀”,甚至狂热的Go鼓吹者曾一度希望Go一统江湖:不仅牢牢把持住自己的云原生市场,占领Java的企业级市场,还要在终端(Android. iOS)、前端(js)上击败现有对手。

有人可能觉得我的上述说法可笑,但这些说法并非空穴来风。Go语言在终端、前端方面还真的曾经发过力,了解Go历史的都知道,Go团队曾经有全职开发人员参与[gomobile项目](,该项目旨在构建在Android和iOS上的Go技术栈,实现用Go语言编写终端应用的目的。

在前端方面,[gopherjs项目]可以将go代码编译为js代码并运行于各大浏览器中。后来gopherjs的作者又帮助go项目原生支持WEBassembly,支持将go编译为webassembly运行在浏览器中。

但上面的尝试最终没能“得偿如愿”,现状是在终端、前端应用领域,使用Go编码的人少之又少。于是Go又逐渐冷静下来,回到自己擅长的主力战场,回归到了企业级应用、基础设施、中间件微服务、命令行应用等领域,并且在这些领域取得了越来越多开发者的青睐。

但曾经的全面出击失败给很多开发者留下了“Go功能孱弱”的口实,甚至有人说[亲爹Google]也没能让亲兄弟Android给Go走个后门。

以上就是关于“go语言的优势和劣势是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: go语言的优势和劣势是什么

本文链接: https://www.lsjlt.com/news/347333.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go语言的优势和劣势是什么
    这篇“go语言的优势和劣势是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的优势和劣势是什么”文章吧。go语言的...
    99+
    2023-07-04
  • go语言的优势与劣势
    Go语言是一种开源的编程语言,由Google公司开发。它具有许多优势和劣势,下面我将详细介绍。首先,让我们来看看Go语言的优势:1. 简洁易学:Go语言设计简洁,语法清晰,易于学习和理解。它采用了简化的语法和少量的关键字,使得代码更加易读和...
    99+
    2023-10-26
    go语言 优势 劣势
  • 对比 Go 语言,Kotlin 有什么优势和劣势
    一、更简洁灵活 Kotlin 是多范式语言,对泛型和函数式编程有良好支持,可以写出更简洁和灵活的代码;Go 对泛型支持很弱,甚至可以说不支持,需要使用接口或反射来实现一些通用的功能。 二、支持多平台 Kotlin 支持多平...
    99+
    2023-10-29
    有什么 劣势 优势
  • go语言有哪些优势劣势
    go语言的优势:1、简洁、高效、安全;2、并发处理能力强;3、静态类型和编译型;4、丰富的标准库;5、跨平台和可移植性;6、强大的性能;7、原生支持多范式编程;8、垃圾回收机制;9、强大的并发模型。go语言的劣势:1、语法相对较新;2、生态...
    99+
    2023-12-11
    go语言 优势劣势
  • GO语言接口的优势与劣势,你了解吗?
    当今的编程语言越来越多,其中Go语言因其高效、简单、易学等优势而备受青睐。在Go语言中,接口是一种重要的特性。接口在Go语言中扮演着非常重要的角色,是Go语言与其他语言的重要区别之一。 那么,GO语言接口的优势与劣势是什么呢?下面我们来探讨...
    99+
    2023-06-15
    自然语言处理 打包 接口
  • 分布式系统中Java语言的优势和劣势是什么?
    随着互联网的迅猛发展,分布式系统的应用越来越广泛。Java作为一种广泛使用的编程语言,也在分布式系统中发挥着重要的作用。本文将探讨Java在分布式系统中的优势和劣势,并通过演示代码来具体说明。 一、Java语言在分布式系统中的优势 跨平...
    99+
    2023-10-09
    分布式 关键字 numy
  • GO语言在大数据处理中的优势与劣势分析
    随着大数据时代的到来,数据处理变得越来越重要。在大数据处理中,选择一种高效的编程语言是非常关键的。GO语言作为一种现代化的编程语言,具有许多优势和劣势。本文将从GO语言在大数据处理中的优势和劣势两个方面进行分析,并通过演示代码来加深理解。...
    99+
    2023-08-20
    大数据 自然语言处理 http
  • CDN服务器的优势和劣势是什么
    CDN服务器的优势和劣势是:CDN服务器的优势是能解决用户访问网站响应速度慢的问题,适合对速度要求较高的网站使用;CDN服务器的劣势是对动态网站的支持不友好,建站成本高。具体内容如下:不管是双线服务器,还是多线服务器,主机位置都是固定的,其...
    99+
    2022-10-19
  • 合租空间的优势和劣势是什么
    合租空间的优势:1. 分摊房租和生活费用,降低经济压力。2. 社交机会多,可以结交更多的朋友和同事。3. 共享空间,可以享受更多的设...
    99+
    2023-06-07
    合租空间 空间
  • 双线服务器的优势和劣势是什么
    双线服务器的优势和劣势是:双线服务器的优势是支持全国用户访问,适合针对全国用户的网站使用;双线服务器的劣势是费用较高,带宽较小,初次访问站点的网通用户会很慢。具体内容如下:双线服务器是为了解决国内两大网络(电信和网通)之间的互联互通问题而产...
    99+
    2022-10-03
  • 多线服务器的优势和劣势是什么
    多线服务器的优势和劣势是:多线服务器的优势是可以自动切换到其他线路,不占用服务器系统资源,且自动备份,能实现高速访问网站;多线服务器的劣势是设备和带宽投入的成本大,且多线服务器资本都是共用的,会约束一些消耗系统资本大的功能。具体内容如下:多...
    99+
    2022-10-16
  • Go语言框架在Linux和Unix系统中的优势与劣势:如何选择?
    Go语言是一种由Google开发的编程语言,它简洁、高效,且易于学习。自从Go语言推出以来,已经有很多的框架被开发出来,方便开发者快速构建Web应用程序。在本文中,我们将讨论在Linux和Unix系统中使用Go语言框架的优势和劣势,并提供一...
    99+
    2023-08-02
    linux 框架 unix
  • 大数据有什么优势和劣势
    这篇文章主要讲解了“大数据有什么优势和劣势”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“大数据有什么优势和劣势”吧!  大数据(big data),又称巨量资料,是指以多元形式,从许多不同来...
    99+
    2023-06-02
  • Java语言在自然语言处理中的优势与劣势分析
    自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,旨在让计算机能够理解、处理和生成人类的自然语言。在NLP领域,Java语言作为一种主流编程语言,具有不同于其他语言的优势和劣势。本...
    99+
    2023-06-04
    numpy 自然语言处理 索引
  • 阿里云服务器的优势和劣势是什么
    阿里云服务器是一款专业的云计算服务,其优势和劣势如下: 优势: 1.性能稳定:阿里云服务器具备高效的计算资源,能够保证企业在不同的应用和数据库上进行高效的处理。 2.安全可靠:阿里云服务器采用严格的安全措施,为企业提供高可靠性和安全性的解...
    99+
    2023-10-26
    阿里 劣势 优势
  • Python API 数组同步的优势和劣势是什么?
    Python API(应用程序接口)是一种编程接口,它允许不同的软件之间进行交流和通信。Python API 数组同步是一种常用的数据处理方法,它可以在多个数组之间同步数据,从而提高数据处理的效率和精度。本文将介绍 Python API ...
    99+
    2023-08-17
    api 数组 同步
  • Windows 系统下,Go 和 npm 异步编程的优势和劣势分别是什么?
    在软件开发中,异步编程已经成为了一个非常重要的概念。在 Windows 系统下,Go 和 npm 都提供了异步编程的支持。但是,异步编程并不是万能的,它也有一些优点和缺点。本文将分别探讨 Windows 系统下,Go 和 npm 异步编程的...
    99+
    2023-11-05
    npm 异步编程 windows
  • 月付空间的优势与劣势是什么
    月付空间的优势:1. 灵活性高:用户可以根据自己的需要选择不同的空间大小和使用时间,不需要长期绑定。2. 低成本:相对于购买独立服务...
    99+
    2023-06-07
    月付空间 空间
  • 云服务器有什么优势和劣势
    云服务器是一种云服务,允许客户将其应用程序托管在公共云上,从而使用户可以快速访问、扩展和管理各种应用程序。云服务器提供了多种优势,包括可扩展性、可靠性、高可用性和灵活性等。 以下是云服务器的优势和劣势: 优势: 可扩展性:云服务器可以扩...
    99+
    2023-10-26
    有什么 劣势 优势
  • 上海服务器托管的优势和劣势是什么
    上海服务器托管的优势:1. 稳定性高:上海的服务器托管服务商具备先进的技术和设备,保障服务器的稳定性和可靠性。2. 带宽速度快:上海...
    99+
    2023-06-13
    上海服务器 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作