“我正在参与「启航计划」”

为什么许多公司都开端运用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天然具备高并发的才能,是一切言语无可等到的。那咱们来简略总结一下吧!

  1. 自带运转环境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处理(反正要打包到一同)

  1. 快速编译,且跨渠道

不同于C/C++,关于多个渠道,或许需求修正代码后再编译。也不同于Java的一次编码,编译成中心码运转在多个渠道的虚拟机上。Go只需求一次编码,就能轻松在多个渠道编译成机器码运转。

值得一提的便是它这跨渠道的才能也是Runtime赋予的,由于Runtime有一定屏蔽体系调用的才能。

  1. 天然支撑高性能高并发,且语法简略、学习曲线平缓

C++处理并发的才能也不弱,但由于C++的编码要求很高,假如不是很老练、专业的C++程序员,或许会出许多毛病。而Go或许经验不是那么丰盛,也能写出性能很好的高并发程序。

值得一提的便是它这超强的高并发,也是Runtime赋予的去处理协程调度才能。

  1. 丰富的规范库、完善的东西链

关于开发者而言,装置好Golang的环境后,就能用官方的规范库开发许多功能了。比方下图所示的许多常用包:

为什么很多公司都开始使用Go语言了?

并且Go自身就具有丰富的东西链(比方:代码格式化、单元测验、基准测验、包管理...)

  1. 。。。。。。

许多大厂开端运用Go言语、咱们团队为什么运用GoLang,和这些特性,多少都有一些联系吧~