>  기사  >  백엔드 개발  >  왜 점점 더 많은 주요 인터넷 회사들이 Go 언어를 사용하기 시작합니까?

왜 점점 더 많은 주요 인터넷 회사들이 Go 언어를 사용하기 시작합니까?

PHPz
PHPz원래의
2023-03-24 10:58:341516검색

왜 점점 더 많은 주요 인터넷 회사들이 Go 언어를 사용하기 시작합니까?

Tencent, Meituan, Didi, Baidu, Google, bilibili...와 같은 점점 더 많은 주요 인터넷 회사에서 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

그리고 처음에 Python을 사용했던 ByteDance는 심지어 Go를 완전히 수용했습니다. 국내외 많은 유수의 기업들이 이를 활용하기 시작하고 있는데, 어떤 장점이 있나요? 이제 몇 가지 장점에 대해 이야기해 보겠습니다. 🎜🎜ps: 물론, 청소년수련소에서 바둑 언어를 배워서 큰 프로젝트를 완성하고 싶은 고투바이트 멤버도 있어요~🎜

Go의 장점

🎜 장점이라고 하면 어떤 면에서는 남들에게 없는 기능이 있기 때문일 수도 있고, 귀찮은 부분을 최적화했기 때문일 수도 있습니다. 다른 사람들과 비교하면 일어나야 더 나아질 것입니다. 그런 다음 Go의 일부 기능을 살펴보겠습니다. 하지만 무뚝뚝한 기능을 이해하기 전에 몇 가지 다른 일반적인 언어를 살펴보겠습니다. 🎜

일부 공통 언어

🎜이건 비교가 아니고 누가 좋고 누가 나쁘다는 것이 아니라 강을 건너는 조랑말은 사람마다 다릅니다~🎜

1. C/C++

🎜C 언어는 1971년 Ken Thompson과 Dennis에 의해 개발되었습니다. Ritchie가 발명했으며 Go 언어의 주요 개발자 중 한 명은 Ken Thompson이므로 많은 부분에서 C 언어와 유사합니다. 구조체, Printf 및 값 연산자)🎜🎜C/C++는 많은 초보자를 위한 언어로도 사용되며 직접 기계어 코드로 컴파일됩니다. 그러면 실행 효율성이 높아지고, 모두 실행 환경이 필요하지 않으며, 필수 환경 설치가 필요한 많은 언어와 달리 사용자의 사용 비용이 낮아집니다. 🎜🎜이러한 이유로 하나의 인코딩 또는 컴파일은 하나의 플랫폼에만 적용 가능합니다. 운영 체제가 다르면 인코딩을 수정한 후 컴파일해야 하는 경우도 있고, 직접 다시 컴파일해도 충분할 때도 있습니다. . 🎜🎜또한 개발자에게 "매우 불친절"하다고요? 가비지 수집 (GC) 문제를 직접 처리해야 합니까? 코딩할 때 힙의 메모리가 언제 사용 가능해지고 삭제될지 고려해야 합니다. 코드가 메모리 누수를 일으키고 안전하지 않습니까? 🎜

2. Java

🎜 Java에서 Go를 배우는 사람으로서 초보자이지만 정식 개발을 하기 전에는 Java 에 비해 <strong>개발 효율</strong>이 떨어질 것 같은 느낌이 듭니다. (개인적인 느낌이니 안 된다고 비판하지 마세요. 마음에 들지 않음)~?🎜 🎜Java바이트코드로 직접 컴파일(.class)됩니다. 원래 인코딩과 중간 코드 사이. 이 경우 Java 프로그램은 특정 실행 환경(JVM)이 필요하며, 그보다 실행 효율성이 떨어지며, 가상화 손실이 발생합니다. 하지만 이는 한 번 컴파일하고 (크로스 플랫폼) 여러 위치에서 실행할 수 있다는 장점도 있습니다. 또한 GC도 함께 제공됩니다. 🎜

3. JavaScript

🎜 Python과 마찬가지로 JS도 해석형 언어입니다. , 컴파일할 필요가 없으며 해석된 후 실행할 수 있습니다. 따라서 Js에도 특정 실행 환경(브라우저 엔진)이 필요합니다. 🎜🎜코드를 브라우저에 넣은 후 브라우저는 코드를 구문 분석해야 하므로 가상화 손실도 발생합니다. Js는 브라우저만 실행하면 되므로 크로스 플랫폼이기도 합니다. 🎜

Go에 대해 다시 이야기해보자

🎜이전 공용 언어에 대한 간략한 소개를 읽은 후. C/C++가상화 손실 없이 바이너리로 직접 컴파일되기 때문에 성능이 높습니다. GoJava 의 <strong>자동 가비지 수집 메커니즘</strong>은 매우 훌륭하며, <code>GoJs적용이 좋다고 생각합니다. Go는 플랫폼으로서 훌륭하다고 느껴지며 Go는 당연히 어떤 언어와도 비교할 수 없는 높은 동시성 기능을 가지고 있습니다. 그럼 간단히 요약해보겠습니다! 🎜
  1. 자체 실행 환경인 런타임이 제공되며 GC 문제를 처리할 필요가 없습니다
  2. 🎜Go 프로그램의 실행 환경은 정말 놀랍습니다. 실제로 Java와 같은 대부분의 언어에는 런타임이라는 개념이 있습니다. code>의 경우 해당 프로그램의 실행 환경은 JVM을 별도로 설치해야 합니다. Java 프로그램의 경우 특별한 처리 없이 JMV 환경이 있는 시스템에서만 실행될 수 있습니다. 🎜

    Go 프로그램은 자체 실행 환경과 함께 제공됩니다. Go 프로그램의 런타임은 프로그램의 일부로 바이너리 제품으로 패키지됩니다. , 사용자 프로그램과 함께 실행합니다. 즉, 런타임도 일련의 .go 코드 및 어셈블리 코드 등입니다.입니다. 런타임 함수(예: make([]int, 2, 6), 이 구문은 실제로 런타임에서 Makeslice 함수를 호출합니다). Go 프로그램은 간단히 말하면 별도의 운영환경을 설치하지 않고도 실행이 가능합니다. 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的环境后,就能用官方的标准库开发很多功能了。比如下图所示的很多常用包:

    왜 점점 더 많은 주요 인터넷 회사들이 Go 언어를 사용하기 시작합니까?

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

    이 때문에 Go 프로그램은 GC 문제를 처리할 필요가 없으며 모든 것을 런타임에 맡겨 를 처리합니다. (어쨌든 함께 패키지해야 합니다).
      1. 빠른 컴파일 및 크로스 플랫폼

      C/C++와 다름, 여러 플랫폼의 경우 코드를 수정해야 할 수도 있음 엮다. 중간 코드로 컴파일되어 여러 플랫폼의 가상 머신에서 실행되는 Java의 일회성 인코딩과도 다릅니다. Go는 한 번만 코딩하면 되며 쉽게 기계어 코드로 컴파일되어 여러 플랫폼에서 실행될 수 있습니다.

      런타임에는 시스템 호출을 어느 정도 차단할 수 있는 기능이 있으므로 크로스 플랫폼 기능도 런타임에서 제공한다는 점을 언급할 가치가 있습니다.

        간단한 구문과 부드러운 학습 곡선을 통해 자연스럽게 고성능과 높은 동시성을 지원합니다.

        🎜🎜C++의 동시성 처리 능력은 하지만 C++의 높은 코딩 요구 사항으로 인해 경험이 많고 전문적인 C++ 프로그래머가 아닌 경우 많은 실패가 발생할 수 있습니다. 그리고 Go는 그다지 많은 경험이 없을 수도 있지만 여전히 좋은 성능으로 높은 동시성 프로그램을 작성할 수 있습니다. 🎜🎜매우 높은 동시성도 코루틴 스케줄링을 처리하기 위해 런타임에서 제공하는 기능이라는 점은 언급할 가치가 있습니다. 🎜
          🎜풍부한 표준 라이브러리, 완전한 도구 체인🎜🎜🎜개발자의 경우 Golang 환경을 설치한 후 다음을 사용하여 많은 기능을 개발할 수 있습니다. 공식 표준 라이브러리. 예를 들어 아래 그림에는 일반적으로 사용되는 패키지가 많이 있습니다. 🎜🎜왜 점점 더 많은 주요 인터넷 회사들이 Go 언어를 사용하기 시작합니까?🎜🎜그리고 Go 자체에는 풍부한 도구 체인, (예: 코드 형식 지정, 단위 테스트, 벤치마크 테스트, 패키지 관리...)🎜🎜🎜. . . . . . 🎜🎜🎜많은 대기업이 Go 언어를 사용하기 시작했습니다. 우리 팀이 GoLang을 사용하는 이유는 이러한 기능과 관련이 있습니다~🎜🎜관련 권장 사항: 🎜Go 비디오 튜토리얼🎜🎜

    위 내용은 왜 점점 더 많은 주요 인터넷 회사들이 Go 언어를 사용하기 시작합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.