Tencent, Meituan, Didi, Baidu, Google, bilibili...와 같은 점점 더 많은 주요 인터넷 회사에서 Go 언어
를 사용하기 시작했습니다.Go语言
了,譬如腾讯、美团、滴滴、百度、Google、bilibili...
还有最初使用Python
的字节跳动,甚至已经全面拥向Go
了。这么多国内外首屈一指的公司,都在开始使用它了,它到底有什么优势呢?这就得谈谈它的一些优势了。
ps:当然了,还有Go-To-Byte
的成员,想要学习go语言,并且用它完成青训营的大项目呐~
说起优势,在某些方面多半是因为它有一些别人没有的特性,或者优化了别人麻烦的地方,相比起来,才会更胜一筹。那我们来了解一下Go
的一些特点吧,但在了解生硬的特点之前,我们先来看看其它几种常见的语言:
这里不是对比哟,不是说谁好谁坏,而是小马过河,因人而异~
C语言
是在1971年的时候,被大神Ken Thompson和Dennis Ritchie发明的,而Go语言
的主导开发者之一就是Ken Thompson,所以在很多地方和C语言类似,(比如struct、Printf、&取值符)
C/C++
也作为很多初学初学的语言,它们都是直接编译为机器码,所以执行效率会更高,并且都不需要执行环境,用户的使用成本会更低,不像很多语言还需要安装所需的环境。
也因为这些原因,它们的一次编码或编译只适用于一种平台,对于不同操作系统而言,有时需要修改编码再编译,有时直接重新编译即可。
而且对于开发者也"很不友好"?,需要自己处理垃圾回收(GC)
的问题。编码时,还需要考虑,堆上的内存什么时候free、delete
?代码会不会造成内存泄露、不安全?
自己作为一个从Java
来学习Go
的菜鸟,还未正式开发,就感到开发效率会比Java
低了(个人感觉,不喜勿喷)
~?
Java
是直接编译成字节码(.class)
,这种编译产物是介于原始编码和机器码的一种中间码。这样的话,Java
程序就需要特定的执行环境(JVM)
了,执行效率相比会低一些,还可能有虚拟化损失。但是这样也有一个好处就是可以编译一次,多处执行(跨平台)
。而且它也是自带GC
的。
和Python
一样,JS
是一种解释型语言,它们不需要编译,解释后即可运行。所以Js
也是需要特定的执行环境(浏览器引擎)
的。
将其代码放入浏览器后,浏览器需要解析代码,所以也会有虚拟化损失。Js
只需要浏览器即可运行,所以它也是跨平台的。
看完了前面几种常见语言的简单介绍。C/C++
性能很高,因为它直接编译为二进制,且没有虚拟化损失,Go
觉得还不错;Java
的自动垃圾回收机制很好,Go
觉得也不错;Js
的一次编码可以适用可以适用多种平台,Go
觉得好极了;而且Go
天然具备高并发的能力,是所有语言无可比及的。那我们来简单总结一下吧!
Runtime
,且无须处理GC
问题Go
程序的运行环境可厉害了,其实大部分语言都有Runtime
的概念,比如Java
,它程序的运行环境是JVM
,需要单独安装。对于Java
程序,如果不经过特殊处理,只能运行在有JMV
Python
을 사용했던 ByteDance는 심지어 Go
를 완전히 수용했습니다. 국내외 많은 유수의 기업들이 이를 활용하기 시작하고 있는데, 어떤 장점이 있나요? 이제 몇 가지 장점에 대해 이야기해 보겠습니다. 🎜🎜ps: 물론, 청소년수련소에서 바둑 언어를 배워서 큰 프로젝트를 완성하고 싶은 고투바이트
멤버도 있어요~🎜Go
의 일부 기능을 살펴보겠습니다. 하지만 무뚝뚝한 기능을 이해하기 전에 몇 가지 다른 일반적인 언어를 살펴보겠습니다. 🎜C 언어
는 1971년 Ken Thompson과 Dennis에 의해 개발되었습니다. Ritchie가 발명했으며 Go 언어
의 주요 개발자 중 한 명은 Ken Thompson이므로 많은 부분에서 C 언어와 유사합니다. 구조체, Printf 및 값 연산자)
🎜🎜C/C++
는 많은 초보자를 위한 언어로도 사용되며 직접 기계어 코드로 컴파일됩니다. 그러면 실행 효율성이 높아지고, 모두 실행 환경이 필요하지 않으며, 필수 환경 설치가 필요한 많은 언어와 달리 사용자의 사용 비용이 낮아집니다. 🎜🎜이러한 이유로 하나의 인코딩 또는 컴파일은 하나의 플랫폼에만 적용 가능합니다. 운영 체제가 다르면 인코딩을 수정한 후 컴파일해야 하는 경우도 있고, 직접 다시 컴파일해도 충분할 때도 있습니다. . 🎜🎜또한 개발자에게 "매우 불친절"하다고요? 가비지 수집 (GC)
문제를 직접 처리해야 합니까? 코딩할 때 힙의 메모리가 언제 사용 가능해지고 삭제
될지 고려해야 합니다. 코드가 메모리 누수를 일으키고 안전하지 않습니까? 🎜Java
에서 Go
를 배우는 사람으로서 초보자이지만 정식 개발을 하기 전에는 Java
에 비해 <strong>개발 효율</strong>이 떨어질 것 같은 느낌이 듭니다. (개인적인 느낌이니 안 된다고 비판하지 마세요. 마음에 들지 않음)
~?🎜 🎜Java
는 바이트코드로 직접 컴파일(.class)
됩니다. 원래 인코딩과 중간 코드 사이. 이 경우 Java
프로그램은 특정 실행 환경(JVM)
이 필요하며, 그보다 실행 효율성이 떨어지며, 가상화 손실이 발생합니다. 하지만 이는 한 번 컴파일하고 (크로스 플랫폼)
여러 위치에서 실행할 수 있다는 장점도 있습니다. 또한 GC
도 함께 제공됩니다. 🎜Python
과 마찬가지로 JS
도 해석형 언어입니다. , 컴파일할 필요가 없으며 해석된 후 실행할 수 있습니다. 따라서 Js
에도 특정 실행 환경(브라우저 엔진)
이 필요합니다. 🎜🎜코드를 브라우저에 넣은 후 브라우저는 코드를 구문 분석해야 하므로 가상화 손실도 발생합니다. Js
는 브라우저만 실행하면 되므로 크로스 플랫폼이기도 합니다. 🎜C/C++
는 가상화 손실 없이 바이너리로 직접 컴파일되기 때문에 성능이 높습니다. Go
는 Java 의 <strong>자동 가비지 수집 메커니즘</strong>은 매우 훌륭하며, <code>Go
도 Js
의 적용이 좋다고 생각합니다. Go
는 플랫폼으로서 훌륭하다고 느껴지며 Go
는 당연히 어떤 언어와도 비교할 수 없는 높은 동시성 기능을 가지고 있습니다. 그럼 간단히 요약해보겠습니다! 🎜런타임
이 제공되며 GC
문제를 처리할 필요가 없습니다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
处理(反正要打包到一起)
。
不同于C/C++
,对于多个平台,可能需要修改代码后再编译。也不同于Java
的一次编码,编译成中间码运行在多个平台的虚拟机上。Go
只需要一次编码,就能轻松在多个平台编译成机器码运行。
值得一提的就是它这跨平台的能力也是Runtime
赋予的,因为Runtime
有一定屏蔽系统调用的能力。
C++
处理并发的能力也不弱,但由于C++
的编码要求很高,如果不是很老练、专业的C++程序员
,可能会出很多故障。而Go
可能经验不是那么丰厚,也能写出性能很好的高并发程序。
值得一提的就是它这超强的高并发,也是Runtime
赋予的去处理协程调度能力。
对于开发者而言,安装好Golang
的环境后,就能用官方的标准库开发很多功能了。比如下图所示的很多常用包:
而且Go
自身就具有丰富的工具链,(比如:代码格式化、单元测试、基准测试、包管理...)
Go
프로그램은 GC
문제를 처리할 필요가 없으며 모든 것을 런타임
에 맡겨 를 처리합니다. (어쨌든 함께 패키지해야 합니다)
. C/C++
와 다름, 여러 플랫폼의 경우 코드를 수정해야 할 수도 있음 엮다. 중간 코드로 컴파일되어 여러 플랫폼의 가상 머신에서 실행되는 Java
의 일회성 인코딩과도 다릅니다. Go
는 한 번만 코딩하면 되며 쉽게 기계어 코드로 컴파일되어 여러 플랫폼에서 실행될 수 있습니다.
런타임
에는 시스템 호출을 어느 정도 차단할 수 있는 기능이 있으므로 크로스 플랫폼 기능도 런타임
에서 제공한다는 점을 언급할 가치가 있습니다. 간단한 구문과 부드러운 학습 곡선을 통해 자연스럽게 고성능과 높은 동시성을 지원합니다.
C++
의 동시성 처리 능력은 하지만 C++
의 높은 코딩 요구 사항으로 인해 경험이 많고 전문적인 C++ 프로그래머
가 아닌 경우 많은 실패가 발생할 수 있습니다. 그리고 Go
는 그다지 많은 경험이 없을 수도 있지만 여전히 좋은 성능으로 높은 동시성 프로그램을 작성할 수 있습니다. 🎜🎜매우 높은 동시성도 코루틴 스케줄링을 처리하기 위해 런타임
에서 제공하는 기능이라는 점은 언급할 가치가 있습니다. 🎜Golang
환경을 설치한 후 다음을 사용하여 많은 기능을 개발할 수 있습니다. 공식 표준 라이브러리. 예를 들어 아래 그림에는 일반적으로 사용되는 패키지가 많이 있습니다. 🎜🎜🎜🎜그리고 Go
자체에는 풍부한 도구 체인, (예: 코드 형식 지정, 단위 테스트, 벤치마크 테스트, 패키지 관리...)
🎜🎜🎜. . . . . . 🎜🎜🎜많은 대기업이 Go 언어를 사용하기 시작했습니다. 우리 팀이 GoLang을 사용하는 이유는 이러한 기능과 관련이 있습니다~🎜🎜관련 권장 사항: 🎜Go 비디오 튜토리얼🎜🎜위 내용은 왜 점점 더 많은 주요 인터넷 회사들이 Go 언어를 사용하기 시작합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!