欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 13:24:58
今天小编就给大家分享的文章是为什么大家都选择用go语言?我觉得选择用go语言的原因有很多,go语言用于服务器端开发,适合很多程序员一起开发大型的软件,并且在软件的不断增长过程中,他能让程序员更容易的惊醒修改,想要go语言入门和学习go语言的小伙伴一定要看看了,希望对大家有帮助。 静态,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语言的知识,可以关注官网,获取更多的资讯!

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