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

简介: 为什么很多公司都开始使用Go语言了?写在前面最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。接近尾期了,是时候做一些总结了,那从什么地方开始呢?那就从我们为什么要选择Go语言开始吧~项目地址项目文档越来越多的互联网大厂开始使用Go语言了,譬如腾讯、美团、滴滴、百度、Google、bilibili...还有最初使用Python的字节跳动,甚至已经全面拥向Go了。这么多国内外首屈一指的公司,都在开始使用它了,它到底有什么优势呢?这就得谈谈它的一些优势了。ps:当然了,还有Go-To-Byte的成员,想要学习go语言,并且用它完成青训营的大项目呐~

为什么很多公司都开始使用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自身就具有丰富的工具链,(比如:代码格式化、单元测试、基准测试、包管理...)

  1. 。。。。。。

很多大厂开始使用Go语言、我们团队为什么使用GoLang,和这些特性,多少都有一些关系吧~

相关文章
|
13天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
33 2
|
11天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
21 2
|
11天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
24 2
|
15天前
|
程序员 Go
go语言中的控制结构
【11月更文挑战第3天】
90 58
|
1天前
|
Go 调度 开发者
Go语言中的并发编程:深入理解goroutines和channels####
本文旨在探讨Go语言中并发编程的核心概念——goroutines和channels。通过分析它们的工作原理、使用场景以及最佳实践,帮助开发者更好地理解和运用这两种强大的工具来构建高效、可扩展的应用程序。文章还将涵盖一些常见的陷阱和解决方案,以确保在实际应用中能够避免潜在的问题。 ####
|
1天前
|
测试技术 Go 索引
go语言使用 range 关键字遍历
go语言使用 range 关键字遍历
12 3
|
1天前
|
测试技术 Go 索引
go语言通过 for 循环遍历
go语言通过 for 循环遍历
10 3
|
3天前
|
安全 Go 数据处理
Go语言中的并发编程:掌握goroutine和channel的艺术####
本文深入探讨了Go语言在并发编程领域的核心概念——goroutine与channel。不同于传统的单线程执行模式,Go通过轻量级的goroutine实现了高效的并发处理,而channel作为goroutines之间通信的桥梁,确保了数据传递的安全性与高效性。文章首先简述了goroutine的基本特性及其创建方法,随后详细解析了channel的类型、操作以及它们如何协同工作以构建健壮的并发应用。此外,还介绍了select语句在多路复用中的应用,以及如何利用WaitGroup等待一组goroutine完成。最后,通过一个实际案例展示了如何在Go中设计并实现一个简单的并发程序,旨在帮助读者理解并掌
|
2天前
|
Go 索引
go语言按字符(Rune)遍历
go语言按字符(Rune)遍历
12 3
|
6天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
26 4