“我正在参与「启航计划」”
为什么许多公司都开端运用Go言语了?
写在前面
最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。
挨近尾期了,是时分做一些总结了,那从什么地方开端呢?那就从咱们为什么要选择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,和这些特性,多少都有一些联系吧~