go c++ java,go语言是c语言写的吗
最近,我加入了一个使用Go语言的项目组。因为我之前对Go语言的了解还停留在理论理解的阶段,没有大型项目的经验,加入这个项目组让我真正体验到了Go语言,我的专业技能树也丰富了。
Go的很多语言特性让人耳目一新,最打动我的是Go语言服务开发过程的简单便捷。Go Build生成的二进制文件发布到服务器后,就可以直接运行了。
与C/C语言产生的二进制文件相比,不需要管理大量的依赖关系,处理各种动态库和静态库等。而且C/C语言的开发过程,如果是性能平台相关的程序,光是开发环境和编译环境就能折腾人几天。相比之下,Go语言的开发过程让人感觉很舒服。
当然,我并不是无脑的提倡Go语言,在Go语言的使用上也存在一些困惑和疑惑。为此我也对比了一下自己熟悉的语言:Java,C/C,Python,主要是后台语言。
开发环境就开发环境而言,Go语言是最省心的;当然Java也很省心。它只需要在本地和生产环境分别安装JDK,其他的事情基本和Go差不多。Java可能因为JVM中间层可以随处运行而需要按照二进制平台重新编译,但是现在主流平台已经基本统一了Linux版本,所以我目前还没有遇到Go语言二进制需要单独编译的情况。
C/C和Python的开发环境有点一言难尽。先说Python。Python虽然好用,但是版本历史2.x和3.x与各种依赖包长期不兼容的问题也困扰着很多开发者。虽然有pyenv等环境治理工具,但它为混乱的环境治理隔离了一个安静的地方。但是,只能说没有比较就没有伤害。
除此之外,C/C是一种与平台紧密相关的语言,所以链接库、路径、符号表等。都与底层操作系统关系更为密切,对开发者的要求也相对更高。然而,即使是优秀的开发人员也常常不得不被C/C所淹没,尤其是涉及到对他人的依赖时。因为平台,依赖等。编译时,一些函数的符号信息不一致,菱形依赖等。
跑步成绩是老生常谈。事实上,就目前的发展来看,服务对性能的要求并没有其前辈那么高。我看过马里奥,魂斗罗等玩的那些游戏的实现。当我还是个孩子的时候,他们是如何将图片材料和逻辑压缩到128k和64k的盒式存储器中的。真的是精益求精。
就今天的服务而言,即使是大流量的服务,在追求极致性能和成本之间,也会扩展更多的服务,增加机器来支持相关容量的服务;当然不是说性能不重要,而是在今天,性能的问题可以从更高维度或者更多维度来解决。
就具体语言的性能而言,C/C和Go语言没有过压测试,但原则上两者应该差别不大。对于Java和Python来说,都有虚拟机,但是Python是一种解释性语言。Java虽然有中间层的支持,但也有JIT技术的加持,性能更高。但是Java的GC问题和停世界的机制也让一些服务没有选择Java。
横向来说,各种语言在开发环境和运行性能上都有各自的特点,也有各自的优缺点。这也使得这些语言在不同场景下的使用有所不同。
后端开发主要用Java,Python,Go,C/C。虽然后端开发是一个明确的方向,但是仍然可以有很多细分的领域,不同领域常用的语言还是有很大差别的。
对于不同的帖子,在写之前,我看了海量开放在线课程的主页。而海量开放在线课程的首页做了非常细致的划分。这个分类对于现在的行业划分也是非常准确的。
上面提到的Java、Python、Go、C/C语言在这里主要应用于后端开发。虽然后端开发是一个明确的方向,但是后端开发还有很多细分的领域,不同领域常用的语言还是有很大差别的。
Web后台最常见的后端开发工作往往是在大学期间完成的。大部分是Web开发,也就是设计添加、删除、检查数据库,编写界面的业务逻辑,承接来自前端(Web、Android、iOS、H5等)的请求),完成数据组装返回,兼顾性能,增加缓存层、子数据库、子表等设计。
在Web的背景下,Java和Python是常用的语言,尤其是Java,这关系到Java的生态。爪哇和Spring Boot、米巴提斯等。已经成为中小企业Web开发不可或缺的技术栈。企业的招聘岗位中,对Java的技术要求也是最高的。
其次是Python,虽然Python有丰富的Web框架支持:Flask、Tornado、Django等。做小网站还是可以的,用Python做的大型项目不多。早年Python Web技术的经典案例3354知乎,因为性能的原因,把一些核心服务改成了Go。Python的Web多见于一些访问量较少的网站,比如一些运营平台、活动平台等。
微服务微服务是近年来比较热的概念。随着云技术的不断成熟,现在提倡将大服务破为微服务,通过服务注册和服务发现完成调用链关系,并兼顾云的动态扩展和收缩,实现无状态服务的扩展和收缩,已经是一种成熟的技术。
在微服务中,Java也有广泛的应用。春云已经为微服务提供了很多功能齐全的工具,简单易用,开箱即用。但是由于JVM进程本身的消耗,微服务架构中的一些关键模块为了降低资源使用和调度的成本,仍然会使用C/C通过通用协议向外界提供服务。
这里说的微服务,并不是和Web后端完全并列的。微服务是架构,本身没有逻辑。Web后台也可以通过微服务架构实现。所以在这个需要强调的下,这里主要提到的Java Spring Cloud是针对微服务生态的,Java提供了一个比较完整的微服务生态。
中间件是一个很大的概念。这里将与业务无关的服务视为中间件服务,比如消息中间件。
中间件的开发也被认为是大厂的后台开发;对于中间件来说,Java也是最常用的语言,Go语言也很常见;其实中间件的存在主要取决于生态环境。一个开发生态环境只需要中间件的存在,这就解释了为什么Java和Go是最常见的语言。
服务存储服务,如数据库、文件系统、kv存储等。主要用C/C。
因为存储服务与操作系统和硬件设备密切相关,所以只有C/C可以轻松完成这项工作。在存储服务的实现过程中,实际开发中需要看到大量的系统调用、系统参数调优,以及相关的内核源代码,所以自然C/C是最适合的;当然也有一些是用Go语言的,主要是开发效率和性能的权衡。
云基础架构云基础架构基本上是当今的主流。依托kubernetes,现在很多云基础设施都使用Go语言,Go在资源调度、资源隔离等方面已经有非常成熟的使用。说到资源调度,Go语言已经有很多年没有出现了。为什么现在的云基础设施会成为围棋的天下?
在Google大表论文流行的早期,Hadoop和Yarn是大数据平台资源管理和调度的核心。但当时只有大数据平台需要那么多资源,当时的容器都交给yarn托管;后来docker技术出现并成熟,再到容器编排和kubernetes,Go语言也成功取代了它的位置,成为云基础设施中最常用的语言。所以我们今天看到的腾讯云和阿里云,对外包装的产品如此丰富,其背后一定有Go语言和相关服务在支撑。
工具工具平台是指用于测试、操作和维护等的平台。它在实际场景中也起着非常重要的作用。对于这类工具平台,性能要求不高,但通常会有很多临时性的要求,整体规划也比较模糊。对于这种场景,Python这种短小精悍的语言非常有用,所以在这些工具平台的实现中经常会发现Python的身影。
最后,关于编程语言,除了语言本身的生态,团队的技术栈也是你选择语言的重要原因。如果有选择,还是需要根据大生态做出更好的选择。用正确的语言做正确的事,会事半功倍。
作者:咚咚咚呛
简介:
全栈工程师,目前就职于BAT大数据部,有4年以上技术研发经验,熟悉java和python研发,担任过多个系统研发的主课。目前,他专注于分布式系统的研究和开发,在高并发和分布式系统方面拥有丰富的经验。
版权归作者所有:原创作品来自博主imooc海量开放网络课程君,转载请联系作者取得授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。