为什么大家都选择go语言?

Posted woshijiuke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么大家都选择go语言?相关的知识,希望对你有一定的参考价值。

今天小编就给大家分享的文章是为什么大家都选择用go语言?我觉得选择用go语言的原因有很多,go语言用于服务器端开发,适合很多程序员一起开发大型的软件,并且在软件的不断增长过程中,他能让程序员更容易的惊醒修改,想要go语言入门和学习go语言的小伙伴一定要看看了,希望对大家有帮助。

静态,go是一门静态语言,有着强类型约束,所以我们不太可能出现在Python中变量在运行时类型不匹配(譬如int + string)这样的runtime error。 在编译阶段就能够帮我们发现很多问题,不用等到运行时。(当然,这个静态语言都能做到)

代码规范,很多人都比较反感go强制的编码规范,譬如花括号的位置。但我觉得,就因为强制约定,所以大家写出来的go代码样子都差不多,不用费心再去深究代码样式问题。而且我发现,因为规范统一,我很容易就能理解别人写的代码。

库支持,go的库非常丰富,而且能通过go get非常方便的获取github,google code上面的第三方库(质量你自己得担着了),再不行,用go自己造轮子也是很方便的,而且造的轮子通常都比较稳定。

开发迅速,不得不说,当你习惯用go开发之后,用go开发功能非常的快,相对于静态语言c++,开发的效率快的没话说,我觉得比Python都不差,而且质量有保证。我们花了不到一个星期进行推送服务核心功能开发,到现在都没怎么变动,稳定运行。

部署方便,因为是静态的,只需要build成一个可运行程序就可以了,部署的时候直接扔一个文件过去,不需要像Python那样安装太多的依赖库。

GO特性:

gc

GO提供了gc,这对于c++的童鞋来说,极大的减少了在内存上面犯错的机会,只是go的gc这个效率还真的不好恭维,比起java来说,还有很大的提升空间。

所以有时候写代码,我们还得根据tuning来提升gc的效率,譬如采用内存池的方式来管理大块的slice分配,采用no copy的方式来进行string,slice的互转。

不过go1.3貌似gc性能有了很大的改善,这点让我比较期待。

defer

go的defer其实是一个让人又爱又恨的东西,对于防止资源泄露,defer可是一个很不错的东西,但是滥用defer可是会让你面临很严重的内存问题,尤其是像下面的代码:

for {

defer func(){

//do somthing

}

}

别以为go会在调用完成defer之后就好好的进行gc回收defer里面的东西,在我们进行内存profile的时候,发现大量的内存占用都是defer引起的。所以使用起来需要特别谨慎。

但我觉得,这个go应该会稍微改善,在go1.3里面,也有了对defer的优化。

error

也许error是一个让人争议很大的东西,现代方式的exception那里去呢?但是我觉得error能够非常明确的告诉使用者该函数会有错误返回,如果使用exception,除非文档足够详细,我还真不知道哪里就会蹦出一个异常了。

其实这篇文章我觉得已经解释的很好了,go程序的惯例是对外的API使用error,而内部错误处理可以用defer,recover和panic来简化流程。

其实这倒跟我一贯的编程准则对应,在团队在用Python进行开发的时候,我们都明确要求库对外提供的API需要使用返回值来表示错误,而在内部可以使用try,catch异常机制。

interface

go提供了interface来进行抽象编程。何谓接口,最通常的例子就是鸭子的故事,“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子“。

在go里面,interface就是一堆方法的集合,如果某个对象实现了这些方法,那么该对象可以就算是该interface。使用interface,我们可以很方便的实现非侵入式编程,进行模块功能的替换。

对于长时间沉浸c++和Python的童鞋来说,一下子要用interface来解决抽象问题,可能会很不适应。但当习惯之后,你会发现,其实interface非常的灵活方便。

基于哪些痛点设计出Go语言?

当初他们为什么会有设计一个新语言的冲动呢?让我们一起来回顾一下这些历史,也许很多人对他们当年遇到的问题感同身受。

设计Go语言是为了解决当时Google开发遇到的以下这些问题:

大量的C++代码,同时又引入了Java和Python

成千上万的工程师

数以万计行的代码

分布式的编译系统

数百万的服务器

其主要有以下几个方面的痛点:

编译慢

失控的依赖

每个工程师只是用了一个语言里面的一部分

程序难以维护(可读性差、文档不清晰等)

更新的花费越来越长

交叉编译困难

以上就是小编今天给大家分享的go语言的知识,设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便!想要了解更多关于go语言的知识,可以关注马哥教育官网,获取更多的资讯!

 【免责声明:本文图片及文字信息均由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。】

以上是关于为什么大家都选择go语言?的主要内容,如果未能解决你的问题,请参考以下文章

我为什么选择使用Go语言?

为什么选择Go语言 GO语言都能做什么产品

谢孟军:我为什么选择使用Go语言? | EGO会员首期线上分享活动

为什么很多公司都转型go语言开发?Go语言能做什么

Go语言中的Interface

我为什么放弃了 Python ,选择了 Go?