有人学过GO语言么?和C++比、优缺点在那?

有人学过GO语言么?和C++比、优缺点在那?,第1张

C++适合本地程序的开发。Go语言适合网络程序和本地程序的开发。Go的优点:垃圾回收,语意明确,格式统一。 Go的缺点:效率目前没有C++高,但对于隐销桌面程序而言,效率问题不大,因为硬件已经很快了。c++过顷核于复杂了,加入很多炫技的内容。这些内容脱离了事情的本质。

最明显的就是所谓的面向对象。基于面向对象的工程如果足够大的情况下,会带来很大的耦合度,如果再加上内存管理,多线程等等。项目后期基本上没办法维护和增加功能。

关于c++的语言复杂性,你可以问知乎上的雀携掘任何一位高手。没一个敢说自己精通c++。你也可以去看一下所有的c++编绎器,没有任何一个敢说自己完全实现了c++的标准。不同的编绎器之间实现细节又不同。所以功能再强大没有实用性,就失去了意义,只会制造更多的问题。

对比于其他语言的程序,Go语言的跨平台能力是真的强,拿.Net和JAVA来说吧,.Net在.Net core出现之前是不能跨平台的,只能在windows上编译运行,即使是.net core出现以后,跨平台的程序也是相当的麻烦。而java虽然一直都可以跨平台,但是运行JAVA程序的机器上也必须要有JAVA程序运行环境JRE。而相对于Go程序,跨平台就简单的多了,只需要在编译指定目标程序运行的架构和环境即可编译出指定 *** 作系统和架构的程序。

以上是指定了go的环境变量后执行的go build命令进行目标程序的构建,这种方式会一直生效的,如果不让他一直生效,可以在构建的时候临时指定环境变量,下面以window的环境为例,来介绍临时指定环境变量的方式构建可以在Linux环境下运行的可执行程序:

可以根据不同的架构和 *** 作系统将其编写为不同的.bat的可执行文件放置在程序的根目录,Linux的和MAC的也一样编写成脚本文件放置在程序的根目录,这样在构建的时候就不用再敲命令了,直接运行脚本就可以了。

Java程序编译打包后为war包或者是java包,必须执行java -jar 命令或者将其放置到tomcat的指定目录下,运行tomcat程序。而Go语言编写的程序最终为可执行的文件(window下编译出的是.exe的可执行文件),只需要将其赋予可执行的权限就可以直接运行了。

构建JAVA程序的镜像需要指定java的基础镜像,否则就需要在镜像中安装java的运行环境了,下面展示的是构建的一个JAVA程序的镜像,构建出来镜像的体积相对比较大

而Go程序制作出的镜像就不需要安装任何的依赖环境,因为他在打包的时候就已经将依赖的包一块打包到一起了

拿着这个正悉镜像就可以到处运行了。

通过对比我们可以发现,如果没有之前的技术和业务的积累,重新开发一个新的项目,使用go去开发无疑是最容易上手的,所以现在很多公司都使用go进行开发,也逐渐将其他语言誉清拿的项目逐步的用go语言进行改造。其实用什么语言不重要,合适的才重要,开发项目在选择语言的时候也会综合多方面来考虑选择合适的语言和架构,毕竟很多公司都不是搞研究的,都需要项目来赚钱,所以开发的速度、客户的满意度、项目交付的时间才是驱动公司技术的主要因素。

我们个人也应该不断完善自己的技术栈,不应该太依靠某种庆搭语言,最重要的还是自己的架构思想和底层架构知识,只有掌握了这些才能够不被 社会 和公司“优化”。

首先BFE(baidu front end)这个项目是一个功能类似于nginx的项目,并不是大家传统意义上理解的前端(html+css+js)。之所以称作“frontend”是因为它相对于整个应用是处于最前面直接处理用户的http请求的。

一开始这个项目是使用c语言写的,因为业界大多数http服务器也都是使用c来开发的(如apache、nginx)这段时期称作c-BFE时期。

但是到后期,这个项目遇到了一些问题:

c语言的开发效率太低了

c语言应对需求变更比较吃力

c语言抽象能力不足

c语言需要手动管理内存(有些不很优秀则穗的组员会写出导致内存泄漏的代码)

bug越改越多,稳定性和功能是一对矛盾

c语言程序员不好招

所以问题基本上是出在c语言不适应了现在互联网的快速变更的需求。之后百度决定重写这个项目。

那么在开发效率上,golang基本上是满足了百度的需求。首先BFE组有很多优秀的c/c++的程序员了,他们转go几乎没有什么压力。对于一些不那么优秀的c程序员(比如经常漏内存的),用golang之后也不会导致一些低级错误了。所以在学习成本上,更换golang对百度影响不大。

另外,golang本身的并发模型、语言的描述能力、和内存管理等功能,也超过了c语言。所以整体上,开发效率得到岩盯信粗轮了很大的提升。

使用golang遇到的最大的一个问题就是gc带来的问题。李炳毅老师也重点是讲解了baidu如何解决gc带来的延迟问题。

在golang的1.3版本,百度的实际测试下,10k个对象大概会带来1ms的延迟。而BFE一般会维持50万左右的连接数,如果不对golang的gc做任何优化的情况下,100万链接大概会带来400ms的延迟。相当于一个http请求还没有打到应用上,单单在nginx上就耗费了400ms。这肯定不能接受。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12303826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存