Maison  >  Article  >  développement back-end  >  Pourquoi de plus en plus de grandes sociétés Internet commencent-elles à utiliser le langage Go ?

Pourquoi de plus en plus de grandes sociétés Internet commencent-elles à utiliser le langage Go ?

PHPz
PHPzoriginal
2023-03-24 10:58:341533parcourir

Pourquoi de plus en plus de grandes sociétés Internet commencent-elles à utiliser le langage Go ?

De plus en plus de grandes sociétés Internet commencent à utiliser le langage Go, comme Tencent, Meituan, Didi, Baidu, Google, bilibili...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

Et ByteDance, qui utilisait initialement Python, a même pleinement adopté Go. De nombreuses entreprises leaders au pays et à l’étranger commencent à l’utiliser. Quels sont ses avantages ? Parlons maintenant de certains de ses avantages. 🎜🎜ps : Bien sûr, il y a aussi des membres de Go-To-Byte qui souhaitent apprendre le langage Go et l'utiliser pour réaliser de grands projets dans le camp d'entraînement des jeunes~🎜

Quelques avantages de Go

🎜 En parlant d'avantages, sous certains aspects, c'est probablement parce qu'il possède certaines fonctionnalités que d'autres n'ont pas, ou qu'il optimise les zones problématiques des autres. Par rapport à Ce n’est que lorsque vous vous lèverez que vous serez meilleur. Jetons ensuite un coup d'œil à certaines des fonctionnalités de Go, mais avant de comprendre les fonctionnalités simples, jetons un coup d'œil à plusieurs autres langages courants : 🎜

Quelques langues courantes

🎜Ceci n'est pas une comparaison, il ne s'agit pas de savoir qui est bon ou qui est mauvais, mais un poney traversant la rivière, cela varie d'une personne à l'autre~🎜

1. C/C++

🎜Le langage C a été développé en 1971 par les maîtres Ken Thompson et Dennis. RitchieInventé, et l'un des principaux développeurs du langage Go est Ken Thompson, il est donc similaire au langage C dans de nombreux endroits, (comme comme opérateur struct, Printf et Value)🎜🎜C/C++ est également utilisé comme langage pour de nombreux débutants. Ils sont directement compilés en code machine, Ainsi, l'efficacité d'exécution sera plus élevée, et ils ne nécessitent pas tous d'environnement d'exécution, et le coût d'utilisation pour l'utilisateur sera inférieur, contrairement à de nombreux langages qui nécessitent l'installation des environnements requis. 🎜🎜Pour ces raisons, leur un seul encodage ou compilation n'est applicable qu'à une seule plateforme Pour différents systèmes d'exploitation, il est parfois nécessaire de modifier l'encodage puis de compiler, et parfois il suffit de recompiler directement. . 🎜🎜Et c'est aussi "très peu convivial" pour les développeurs ? Vous devez vous occuper du problème du garbage collection (GC) vous-même. Lors du codage, vous devez également considérer quand la mémoire sur le tas sera libre et supprimée ? Le code provoquera-t-il des fuites de mémoire et sera-t-il dangereux ? 🎜

2. Java

🎜En tant que personne qui apprend Go à partir de Java Je suis un débutant, mais avant le développement formel, je pense que l'efficacité du développement sera inférieure à celle de Java (sentiment personnel, ne critiquez pas si vous le faites) Je n'aime pas ça)~?🎜 🎜Java est directement compilé en bytecode(.class). entre l'encodage d'origine et le code machine. Dans ce cas, le programme Java nécessite un environnement d'exécution spécifique (JVM), et l'efficacité d'exécution sera inférieure à cela, et il peut également y avoir être des pertes de virtualisation. Mais cela présente également l'avantage de pouvoir être compilé une seule fois et exécuté (multiplateforme) à plusieurs endroits. Et il est également livré avec GC. 🎜

3. JavaScript

🎜Comme Python, JS est un langage interprété. , ilsn'ont pas besoin d'être compilés et peuvent être exécutés après avoir été interprétés. Par conséquent, Js nécessite également un environnement d'exécution spécifique (moteur de navigation). 🎜🎜Après avoir inséré le code dans le navigateur, celui-ci doit analyser le code, il y aura donc également une perte de virtualisation. Js ne nécessite qu'un navigateur pour s'exécuter, il est donc également multiplateforme. 🎜

Parlons encore de Go

🎜Après avoir lu la brève introduction des langages communs précédents. C/C++ a des performances élevées car il est directement compilé en binaire sans perte de virtualisation Go pense que c'est plutôt bon Java <. le>mécanisme de collecte automatique des déchets de /code> est très bon, <code>Go pense également qu'il est bon. Le de Js peut être appliqué ; à plusieurs codes à la fois. Go est une excellente plateforme ; et Go possède naturellement des capacités de simultanéité élevées, inégalées par aucun langage. Alors résumons-le brièvement ! 🎜
  1. Livré avec son propre environnement d'exécution Runtime et n'a pas besoin de gérer les problèmes de GC
  2. 🎜L'environnement d'exécution du programme Go est incroyable. En fait, la plupart des langages​​ont le concept de Runtime, comme Java
code>, l'environnement d'exécution de son programme est JVM qui doit être installé séparément. Pour les programmes Java, sans traitement particulier, ils ne peuvent s'exécuter que sur des machines avec un environnement JMV. 🎜

Le programme Go est livré avec son propre environnement d'exécution. Le Runtime du programme Go sera intégré dans un produit binaire dans le cadre du programme. , avec le programme utilisateur, Run, c'est-à-dire Runtime est également une série de code .go et code assembleur, etc.. la fonction du <code>Runtime (Par exemple, make([]int, 2, 6), cette syntaxe appelle en fait la fonction makeslice dans le Runtime). Pour le programme Go, en termes simples, il peut s'exécuter sans installer d'environnement d'exploitation supplémentaire. Sauf si vous avez besoin de développer des programmes Go. 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的环境后,就能用官方的标准库开发很多功能了。比如下图所示的很多常用包:

Pourquoi de plus en plus de grandes sociétés Internet commencent-elles à utiliser le langage Go ?

而且Go自身就具有丰富的工具链(比如:代码格式化、单元测试、基准测试、包管理...)

Pour cette raison, le programme Go n'a pas besoin de gérer le problème GC et laisse tout au Runtime pour gérer (il doit être regroupé de toute façon).
    1. Compilation rapide et multiplateforme

    Différent du C/C++, pour plusieurs plateformes, vous devrez peut-être modifier le code avant la compilation. Il est également différent du codage unique de Java, qui est compilé en code intermédiaire et exécuté sur des machines virtuelles sur plusieurs plates-formes. Go ne doit être codé qu'une seule fois et peut être facilement compilé en code machine et exécuté sur plusieurs plates-formes.

    Il convient de mentionner que sa capacité multiplateforme est également donnée par Runtime, car Runtime a la capacité de bloquer les appels système dans une certaine mesure.

      Prend naturellement en charge les hautes performances et la simultanéité élevée, avec une syntaxe simple et une courbe d'apprentissage douce

      🎜🎜La capacité du C++ à gérer la simultanéité est pas faible non plus. Cependant, en raison des exigences élevées de codage du C++, si vous n'êtes pas un programmeur C++ très expérimenté et professionnel, de nombreux échecs peuvent survenir. Et Go n'a peut-être pas beaucoup d'expérience, mais il peut quand même écrire des programmes à haute concurrence avec de bonnes performances. 🎜🎜Il convient de mentionner que sa très haute simultanéité est également la capacité offerte par le Runtime à gérer la planification des coroutines. 🎜
        🎜Bibliothèque standard riche, chaîne d'outils complète🎜🎜🎜Pour les développeurs, après avoir installé l'environnement Golang, de nombreuses fonctions peuvent être développées à l'aide du bibliothèque standard officielle. Par exemple, il existe de nombreux packages couramment utilisés illustrés dans l'image ci-dessous : 🎜🎜Pourquoi de plus en plus de grandes sociétés Internet commencent-elles à utiliser le langage Go ?🎜🎜Et Go lui-même possède une chaîne d'outils riche, (telle que : le formatage du code, les tests unitaires, tests de benchmark, gestion des packages...)🎜🎜🎜. . . . . . 🎜🎜🎜De nombreuses grandes entreprises ont commencé à utiliser le langage Go. La raison pour laquelle notre équipe utilise GoLang a quelque chose à voir avec ces fonctionnalités~🎜🎜Recommandations associées : 🎜Tutoriel vidéo Go🎜🎜

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn