初识Go语言--优势、劣势、发展方向
发布日期:2021-06-30 18:25:23 浏览次数:3 分类:技术文章

本文共 2435 字,大约阅读时间需要 8 分钟。

在这里插入图片描述

Go的由来

Go语言是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,它用批判吸收的眼光,融合C语言、Java等众家之长,将简洁、高效演绎得淋漓尽致。

Go语言起源于2007年,当时Google的技术大神们备受C++越来越臃肿的困扰,决心开发一种新的语言来取代C++。他们认为:与其在臃肿的语言上不断增加新的特性,不如简化编程语言。于是,Golang这门新语言应运而生。

Go是一种强类型语言,这意味着它本质上不如解释语言灵活。但Go提供了任何类型(接口)和反射机制,使语言在灵活性上与解释语言非常接近。

在十年多的时间里,Go语言发展势头强劲,凭借其简洁、高效的特性,在竞争激烈的编程语言市场中占据了一席之地。Google、腾讯、阿里等大公司纷纷选择使用Go语言来开发服务应用项目。当然,和其他的编程语言一样,Go语言也有其自身的缺陷。

优点

性能(机器代码)

GoLang是一种编译语言,可以编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖。性能优于那些解释语言。

支持函数多返回值

目前的主流语言中除Python外基本都不支持函数的多返回值功能,但很多情况下开发者非常需要这个功能。比如,我们要定义一个函数,用于返回个人的名字信息,而名字信息包含多个部分——姓氏、名字、中间字,在不支持多返回值的语言中可以定义一个结构体或者传出参数返回多个值,但是go可以这样

func getName(firstName,middleName,lastName string){
return "May","M","Chen"}fn,mn,ln,nn := getName()//函数调用

并发支持

这可能是GoLang最受好评的特色。它支持并发,因为它诞生了。它可以充分利用多核功能。GoLang使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。堆栈使用也可以动态扩展/收缩,这使内存使用更加智能。这与Java线程不同,后者通常只允许创建数千个线程。

动态的语言感受

GoLang是一种静态语言,但它给开发人员带来了动态语言的感觉。作为静态语言,在进行编译时可以检测到许多隐藏的问题,尤其是语法错误。此外,有许多软件包供开发人员使用,在开发过程中很容易导入它们,这使我们不再担心它的功能,让我们觉得我们正在处理动态语言。

自动垃圾回收降低了开发难度

内存和资源管理一直是一个让人非常抓狂的难题。在其他语言(如C或C++)中,使用内存前要先分配这段内存,使用完毕后再将其释放掉,一个小疏忽就可能引发内存泄漏,导致程序甚至系统崩溃。而Go语言的现代化垃圾回收机制显著地降低了开发难度,把无趣的内存管理交给专业的编译器去做,而让程序员专注于更有趣的事情。虽然它的GC并不完美,但它可以满足大多数关于垃圾收集的要求。

工具链

有许多易于使用的内置工具可以帮助开发人员编写可维护和可读的代码。效率大大提高。这些包括gofmt,goimport等。它们可以使我们的代码看起来标准化,并且可以简化审查工作。

漂亮的错误处理

漂亮的错误处理规范是Go语言最大的亮点之一。Go语言引入了defer关键字用于标准的错误处理流程,并提供了内置函数panic、recover完成异常的抛出与捕获。与C++和Java等语言中的异常捕获机制相比,Go语言的错误处理机制可以大量减少代码量,开发者无需再仅为了程序安全而添加大量一层套一层的try-catch语句。

更丰富的内置类型

Go语言是一种典型的实战派语言,它内置了一个其他静态语言通常用库方式来支持的字典类型(map),理由很简单:既然绝大多数开发者都需要用到这个类型,为什么还非要每个人都写一行import语句来包含一个库?

Go语言还新增了一个数据类型:数组切片(Slice)。我们可以将数组切片看作是一种可动态增长的数组,其功能与C++标准库中的vector类似,但有效地消除了反复写import *** 的工作量

简单易学

GoLang的作者都有C背景,GoLang有C基因。有25个关键词但具有丰富的表达能力。它可以支持几乎所有在其他语言中看到的功能,如继承,重载,对象等。

本机C支持

您可以在Go程序中嵌入C代码,以便可以使用许多功能强大的C库。

在这里插入图片描述

缺点

缺乏框架

GoLang开发人员没有重要的框架。但是有其他语言。Ruby有Ruby on Rails,Python有Django,PHP有Laravel。

错误处理信息很难获取

如果可能出现错误,Go程序需要函数来返回错误。这可能导致错误跟踪丢失导致缺少有用的错误处理逻辑的问题。有些工具可以帮助检测这种错误,例如errcheck和megacheck。但它们更像是解决方法。开发人员还需要编写大量的if块来检查错误并处理它,这使得代码不那么干净。

包管理

Go中的包管理并不完美。默认情况下,它无法创建具有固定包版本的依赖关系树,这意味着在不同时间构建时,创建的生成可能基于不同版本的包。相比之下,Python,NodeJS(npm)和Ruby都有相对维护良好的包管理系统。例如,在Ruby on Rails项目中,您可以拥有一个Gemfile文件,该文件定义依赖项及其依赖版本,这意味着即使将来某些版本的某些版本稍后会更新,也会使用相同版本的软件包来创建新版本。

主要应用场景

Golang非常适合用来做网络并发方面的服务,比如消息推送、监控、容器等。国内外的很多著名公司都使用了Go语言来开发服务及应用,比如:

Google最核心的搜索和广告业务

腾讯的Docker容器化

百度的运维BFE(Baidu Front End)项目,应对庞大的前端页面访问量

小米的运维监控系统,小米商城、小米视频等团队也在使用Go语言

详细学习,

转载地址:https://lichen.blog.csdn.net/article/details/115143776 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:我们为什么需要异常处理、抛出Error
下一篇:Mac和Windows如何同时选择并操作多个文件

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月26日 03时41分42秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章