共计 2037 个字符,预计需要花费 6 分钟才能阅读完成。
写在后面
最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。
靠近尾期了,是时候做一些总结了,那从什么中央开始呢?那就从咱们为什么要抉择 Go 语言开始吧~
🌐我的项目地址
📝我的项目文档
越来越多的互联网大厂开始应用 Go 语言了,譬如腾讯、美团、滴滴、百度、Google、bilibili…
还有最后应用 Python 的字节跳动,甚至曾经全面拥向 Go 了。这么多国内外名列前茅的公司,都在开始应用它了,它到底有什么劣势呢?这就得谈谈它的一些劣势了。
ps:当然了,还有 Go-To-Byte 的成员,想要学习 go 语言,并且用它实现青训营的大我的项目呐~
Go 的一些劣势
说起劣势,在某些方面多半是因为它有一些他人没有的个性,或者优化了他人麻烦的中央,相比起来,才会更胜一筹。那咱们来理解一下 Go 的一些特点吧,但在理解僵硬的特点之前,咱们先来看看其它几种常见的语言:
常见的一些语言
这里不是比照哟,不是说谁好谁坏,而是小马过河,因人而异~
1、C/C++
C 语言是在 1971 年的时候,被大神 Ken Thompson 和 Dennis Ritchie 创造的,而 Go 语言的主导开发者之一就是 Ken Thompson,所以在很多中央和 C 语言相似,(比方 struct、Printf、& 取值符)
C/C++ 也作为很多初学初学的语言,它们都是间接编译为机器码,所以执行效率会更高,并且都不须要执行环境,用户的应用老本会更低,不像很多语言还须要装置所需的环境。
也因为这些起因,它们的一次编码或编译只实用于一种平台,对于不同操作系统而言,有时须要批改编码再编译,有时间接从新编译即可。
而且对于开发者也 ” 很不敌对 ”😒,须要本人解决垃圾回收(GC)的问题。编码时,还须要思考,堆上的内存什么时候 free、delete?代码会不会造成内存泄露、不平安?
2、Java
本人作为一个从 Java 来学习 Go 的菜鸟,还未正式开发,就感到开发效率会比 Java 低了(个人感觉,不喜勿喷)~😁
Java 是间接编译成字节码(.class),这种编译产物是介于原始编码和机器码的一种两头码。这样的话,Java 程序就须要特定的执行环境(JVM)了,执行效率相比会低一些,还可能有虚拟化损失。然而这样也有一个益处就是能够编译一次,多处执行(跨平台)。而且它也是自带 GC 的。
3、JavaScript
和 Python 一样,JS 是一种解释型语言,它们不须要编译,解释后即可运行。所以 Js 也是须要特定的执行环境(浏览器引擎)的。
将其代码放入浏览器后,浏览器须要解析代码,所以也会有虚拟化损失。Js 只须要浏览器即可运行,所以它也是跨平台的。
再谈 Go
看完了后面几种常见语言的简略介绍。C/C++ 性能很高,因为它间接编译为二进制,且没有虚拟化损失,Go 感觉还不错;Java 的主动垃圾回收机制很好,Go 感觉也不错;Js 的一次编码能够实用能够实用多种平台,Go 感觉好极了;而且 Go 人造具备高并发的能力,是所有语言无可比及的。那咱们来简略总结一下吧!
自带运行环境 Runtime,且毋庸解决 GC 问题
Go 程序的运行环境可厉害了,其实大部分语言都有 Runtime 的概念,比方 Java,它程序的运行环境是 JVM,须要独自装置。对于 Java 程序,如果不通过非凡解决,只能运行在有 JMV 环境的机器上。
而 Go 程序是自带运行环境的,Go 程序的 Runtime 会作为程序的一部分打包进二进制产物,和用户程序一起运行,也就是说 Runtime 也是一系列.go 代码和汇编代码等,用户能够“间接”调用 Runtime 的函数(比方 make([]int, 2, 6),这样的语法,其实就是去调用 Runtime 中的 makeslice 函数)。对于 Go 程序,简略来说就是不须要装置额定的运行环境,即可运行。除非你须要开发 Go 的程序。
正因为这样,Go 程序也毋庸解决 GC 的问题,全权交由 Runtime 解决(反正要打包到一起)。
疾速编译,且跨平台
不同于 C /C++,对于多个平台,可能须要批改代码后再编译。也不同于 Java 的一次编码,编译成两头码运行在多个平台的虚拟机上。Go 只须要一次编码,就能轻松在多个平台编译成机器码运行。
值得一提的就是它这跨平台的能力也是 Runtime 赋予的,因为 Runtime 有肯定屏蔽零碎调用的能力。
人造反对高性能高并发,且语法简略、学习曲线平缓
C++ 解决并发的能力也不弱,但因为 C ++ 的编码要求很高,如果不是很幼稚、业余的 C ++ 程序员,可能会出很多故障。而 Go 可能教训不是那么丰富,也能写出性能很好的高并发程序。
值得一提的就是它这超强的高并发,也是 Runtime 赋予的去解决协程调度能力。
丰盛的规范库、欠缺的工具链
对于开发者而言,装置好 Golang 的环境后,就能用官网的规范库开发很多性能了。比方下图所示的很多罕用包:
而且 Go 本身就具备丰盛的工具链,(比方:代码格式化、单元测试、基准测试、包治理 …)
。。。。。。
很多大厂开始应用 Go 语言、咱们团队为什么应用 GoLang,和这些个性,多少都有一些关系吧~