go 언어는 C, Pascal 및 CSP를 사용합니다. Go의 언어 기능 중 상당수는 C, Pascal 및 CSP의 세 가지 조상에서 차용되었습니다. Go의 구문, 데이터 유형, 제어 흐름 등은 C에서 상속되었습니다. Go의 패키지, 객체 지향 및 기타 아이디어는 Pascal 분기에서 파생되었으며 Go의 가장 큰 언어 기능인 파이프라인 통신을 기반으로 하는 코루틴 동시성 모델은 C에서 차용되었습니다. CSP 지점.
이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.
1. Go 언어는 당시 Google 개발에서 직면했던 문제를 해결하기 위해 설계되었습니다.
2. Google 개발의 문제점:
3. 현재의 문제와 문제점을 해결하는 방법은 무엇입니까?
Go는 인터넷 시대의 C 언어가 되기를 희망합니다. 대부분의 시스템 수준 언어(Java 및 C# 포함)의 기본 프로그래밍 철학은 C++에서 유래하여 C++의 객체 지향 특성을 더욱 발전시킵니다. 그러나 Go 언어 설계자들은 C 언어를 배울 가치가 있다고 생각합니다. C 언어의 지속적인 인기의 근원은 그것이 충분히 단순하다는 것입니다. 따라서 Go 언어는 충분히 간단합니다.
그래서 당시 그들이 Go를 디자인할 때의 목표는 온갖 느림과 번거로움을 없애고, 다양한 비효율성과 확장성을 개선하는 것이었습니다. Go는 대규모 시스템을 개발하는 사람들에 의해 설계되었으며 언어 설계를 연구하기 위한 것이 아니라 프로그래밍을 보다 편안하고 편리하게 만들기 위한 것입니다.
그러나 당시 Google의 내부 현실과 결합하면 예를 들어 많은 엔지니어가 C 부서 출신이었기 때문에 새로 설계된 언어는 배우기 쉬울 것입니다. C와 유사한 언어가 더 좋습니다. 20년이 지났으니 새로운 언어 디자인된 언어는 현대적이어야 한다(내장 GC 등). 마지막으로 실제 경험을 바탕으로 목표에 맞게 Go 언어를 설계했습니다.
4. Go 언어의 특징:
1. 쉬운 학습 곡선
Go 언어에는 C와 유사한 구문을 포함하여 간단한 구문이 있습니다. Go 언어는 배우기 쉽기 때문에 일반 대학생도 몇 주 안에 사용 가능한 고성능 애플리케이션을 작성할 수 있습니다. 중국 사람들은 누구나 속도를 추구하는데, 이것이 중국에서 바둑이 인기를 끄는 이유 중 하나입니다.
Go 언어의 문법적 특징은 너무 단순해서 어떤 트릭도 거의 할 수 없습니다. 간단하고 학습 곡선이 매우 낮으며 매우 빠르게 시작할 수 있습니다.
2. 효율성: 빠른 컴파일 시간, 높은 개발 효율성 및 운영 효율성
개발 과정에서 Java 및 C++의 느린 컴파일 속도에 비해 Go의 빠른 컴파일 시간은 효율성의 주요 장점입니다. Go는 C에 가까운 운영 효율성과 PHP에 가까운 개발 효율성을 제공합니다.
C 언어의 개념은 프로그래머를 신뢰하고, 언어를 작게 유지하고, 하위 계층을 보호하지 않고 하위 수준 친화적이며, 언어의 실행 효율성과 성능에주의를 기울이는 것입니다. Python의 태도는 가능한 한 적은 코드로 최대한 많은 것을 달성하는 것입니다. 그래서 Go 언어가 C와 Python을 통합하고 싶어한다는 것을 느낄 수 있는데, 이는 좋은 일입니다.
3. 명문가 출신이고 혈통이 순수하다
바둑이 명문가 출신이라고 하는 이유는 바둑 언어의 창시자에게서 알 수 있다. 둘째, Go 언어는 Google에서 유래되었습니다. 업계에서 Google의 인기와 강점은 당연합니다. 다양한 프로그래밍 언어들이 패권을 놓고 경쟁하는 상황에서 구글은 새로운 프로그래밍 언어를 출시하기 위해 인재들을 모았다. 당연히 나름의 전략적 고려 사항도 있다. 그리고 Go 언어의 발전 추세로 볼 때 Google은 여전히 새로운 사랑에 큰 중요성을 부여하고 있으며 당연히 좋은 개발 미래를 가지고 있습니다.
4. 자유롭고 효율적: 아이디어의 결합, 방해가 되지 않는 인터페이스
Go 언어는 동시 프로그래밍을 자연스럽게 지원하면서 개발 효율성과 운영 효율성의 완벽한 융합이라고 할 수 있습니다. Go 언어는 절차적 프로그래밍, 객체 지향 프로그래밍, 인터페이스 지향 프로그래밍, 함수형 프로그래밍을 포함한 모든 최신 프로그래밍 패러다임을 지원합니다. 프로그래머는 필요한 것을 선택하고 자유롭게 결합하여 원하는 대로 재생할 수 있습니다.
5. 강력한 표준 라이브러리
여기에는 인터넷 애플리케이션, 시스템 프로그래밍 및 네트워크 프로그래밍이 포함됩니다. Go의 표준 라이브러리는 기본적으로 매우 안정적입니다. 특히 여기서 언급한 세 가지 라이브러리, 네트워크 계층 및 시스템 계층 라이브러리는 매우 실용적입니다. **Go 언어의 lib 라이브러리는 작지만 완전합니다. **Go 언어의 lib 라이브러리에는 기본적으로 일반적으로 사용되는 대부분의 라이브러리가 포함되어 있습니다. 일부 라이브러리는 그다지 좋지 않지만 향후 개발에서는 이러한 문제가 해결될 것이라고 믿기 때문에 문제가 되지 않는다고 생각합니다.
6. 간편한 배포: 바이너리 파일, 복사 배포
많은 사람들이 Go를 선택하는 가장 큰 이유는 배포가 너무 편리하기 때문에 이제 많은 사람들이 운영 및 유지 관리 프로그램 개발에 Go를 사용하고 있습니다.
7. 간단한 동시성
** 병렬 및 비동기 프로그래밍은 거의 고통스럽지 않습니다. **Go 언어의 두 가지 아티팩트인 Goroutine과 Channel은 동시 및 비동기 프로그래밍에 있어 큰 축복입니다. C, C++, Java, Python 및 JavaScript와 같은 언어의 동시성 및 비동기식 방법은 제어하기가 너무 복잡하고 오류가 발생하기 쉬운데 Go는 이 문제를 매우 우아하고 원활하게 해결합니다. 수년 동안 동시성 및 비동기 프로그래밍으로 어려움을 겪어온 프로그래머에게 이는 완전히 눈길을 끄는 느낌입니다. Go는 동시성을 많이 지원하는 매우 효율적인 언어입니다. Go는 빅데이터, 마이크로서비스 및 동시성을 위해 개발된 프로그래밍 언어입니다.
언어로서의 Go는 일을 단순하게 만들기 위해 노력합니다. 새로운 개념을 많이 소개하지는 않지만 믿을 수 없을 정도로 빠르고 사용하기 쉬운 간단한 언어를 만드는 데 중점을 둡니다. 유일한 혁신은 고루틴과 채널입니다. 고루틴은 Go의 경량 스레드 지향 접근 방식이며, 채널은 고루틴 간 통신에 선호되는 방법입니다.
고루틴을 생성하는 비용은 매우 낮습니다. 추가 메모리가 몇 천 바이트에 불과하므로 수백 또는 수천 개의 고루틴을 동시에 실행할 수 있습니다. 고루틴 간의 통신은 채널의 도움으로 이루어질 수 있습니다. 고루틴과 채널 기반 동시성 접근 방식을 사용하면 사용 가능한 모든 CPU 코어를 사용하고 동시 IO를 처리하는 것이 매우 쉽습니다. Python/Java에 비해 고루틴에서 함수를 실행하려면 최소한의 코드가 필요합니다.
8. 안정성
Go는 강력한 컴파일 검사, 엄격한 코딩 표준 및 완벽한 소프트웨어 수명주기 도구를 갖추고 있으며 안정성이 다른 모든 것보다 뛰어납니다. 그렇다면 Go가 다른 프로그램보다 안정적인 이유는 무엇일까요? Go는 go tool, gofmt, go test 등 소프트웨어 수명주기의 각 측면(개발, 테스트, 배포, 유지 관리 등)에 대한 도구를 제공하기 때문입니다.
Go의 많은 언어 기능은 세 가지 조상인 C, Pascal 및 CSP에서 차용되었습니다. Go의 구문, 데이터 유형, 제어 흐름 등은 C에서 상속됩니다. Go의 패키지 및 객체 지향 아이디어는 Pascal 브랜치에서 파생됩니다. Go의 가장 큰 언어 기능인 파이프라인 통신 기반 코루틴 동시성 모델은 CSP 브랜치에서 차용되었습니다. .
Java
현재 Taobao, JD.com 등과 같은 대규모 웹사이트는 Java로 작성됩니다. 주요 특징은 안정성, 우수한 오픈 소스, 자체 작성 사양 세트, 적당한 개발 효율성이며 현재 가장 주류 언어입니다. 프로그래밍 언어의 큰 이름입니다. 가장 큰 가시성과 사용자 기반을 보유하고 있습니다. 아무리 바람이 불어도 나는 흔들리지 않고 굳건히 서 있습니다. 그를 강건하게 하라, 그를 강건하게 하라, 그러면 산들바람이 그를 수평으로 불게 하시고, 밝은 달이 강 위에 빛나게 하리라.
c#
실행 속도는 빠르고(4.28), 학습 난이도는 보통, 개발 속도는 보통입니다. 하지만 C#의 많은 단점으로 인해 JD.com, Ctrip 등 대형 웹사이트의 전신은 모두 C#으로 개발되었으나 현재는 Java로 마이그레이션되었습니다.
C/C++
다른 모든 언어가 탄생한 기존 프로그래밍 언어의 조상입니다. 가장 빠른 실행 속도는 타의 추종을 불허합니다. 하지만 작성하기가 가장 복잡하고 개발하기가 어렵습니다.
Javascript
프로그래밍 언어의 독특하고 오만한 아름다움. 프런트 엔드 처리 기능은 다른 언어와 비교할 수 없습니다. 개발 중인 js 백엔드 처리 기능도 뛰어납니다. 앞 뒤 뒤 모두 다 챙겨가는데 나는 또 누구일까요?
Python
스크립팅 언어, 가장 느린(258초), 간결한 코드, 짧은 학습 진행 및 빠른 개발 속도. Douban은 Python으로 작성되었습니다. Python의 유명한 서버 프레임워크로는 django와 Flask가 있습니다. 그러나 Python은 대규모 프로젝트에서는 안정적이지 않기 때문에 Python을 사용하는 일부 회사는 나중에 Java로 마이그레이션했습니다.
scala
파이썬보다 10배 빠르며 자바와 유사한 컴파일 언어이지만, 학습 진행이 느리고, 실제 프로그래밍에서는 언어에 능숙하지 않으면 심각한 성능 저하를 일으키기 쉽습니다. 예를 들어 나중에 Yammer는 scala에서 java로 마이그레이션했습니다. 마이크로서비스 프레임워크에는 라곰(lagom) 등이 포함됩니다.
Go
프로그래밍 세계의 새로운 아이. 높은 동시성 기능은 타의 추종을 불허합니다. Python과 동일한 간결한 코드와 개발 속도를 가지고 있을 뿐만 아니라 C 언어와 동일한 실행 효율성을 가지고 있어 뛰어난 장점을 가지고 있습니다.
소프트웨어 업계에 잠시 종사해본 사람이라면 보편적인 프로그래밍 언어도, 보편적인 개발 프레임워크도, 보편적인 솔루션도 없다는 것을 알고 있습니다. 새로운 기술의 출현은 오래된 기술에 대한 일부 사람들의 강한 불만에 기인합니다. Go 언어도 예외는 아닙니다. 예를 들어, C 언어의 종속성 관리, C++의 가비지 수집, Java의 투박한 유형 시스템 및 과도한 Java EE 사양, 스크립트 언어(예: PHP, Python 및 Ruby)의 성능에 대해 종종 논쟁과 불평이 제기됩니다. 많은 개발자 커뮤니티의 문제에 대해.
Go 언어의 장점
Go 언어는 뛰어난 소프트웨어 엔지니어링 아이디어와 원칙을 구현하는 다양한 프로그래밍 패러다임의 마스터이며, 그 기능을 통해 개발자는 프로그램을 빠르게 개발, 테스트 및 배포하여 크게 개선할 수 있습니다. 생산 효율성. 다른 주류 언어와 비교하여 Go 언어의 장점을 살펴보겠습니다.
1) C/C++에 비해 Go 언어는 명확한 종속성 관리와 완전 자동 가비지 수집 메커니즘을 갖추고 있어 코드 양이 크게 줄어들고 개발 효율성이 크게 향상됩니다.
2) Java에 비해 Go 언어는 간결한 유형 시스템, 함수형 프로그래밍 패러다임 및 고급 동시 프로그래밍 모델을 갖추고 있습니다. 결과적으로 코드 블록은 더 작고, 더 간결하고, 더 재사용 가능하며, 멀티 코어 컴퓨팅 환경에서 더 빠르게 실행됩니다.
3) PHP의 경우 Go 언어가 더 다양하고 표준화되어 있습니다. 이는 대규모 소프트웨어를 구축하고 다양한 모듈을 더 잘 구성하는 데 더 적합합니다. 성능면에서 PHP는 Go와 경쟁할 수 없습니다.
4) Python/Ruby의 경우 Go의 장점은 간결한 구문, 비침해적 플랫 유형 시스템, 자연스러운 다중 패러다임 프로그래밍 모델에 있습니다. PHP와 마찬가지로 Python과 Ruby는 동적으로 유형이 지정되는 해석 언어입니다. 즉, 정적으로 유형이 지정되는 컴파일 언어보다 훨씬 느리게 실행됩니다.
요컨대 현재 대부분의 주류 언어에 비해 Go 언어의 가장 큰 장점은 높은 생산 효율성, 고급 종속성 관리 및 유형 시스템, 기본 동시 컴퓨팅 지원입니다. 따라서 Go 언어는 출시 이후 다양한 분야의 개발자들로부터 관심과 호응을 받아왔습니다.
Go 언어의 단점
이제 현재 Go 언어에서 강화하거나 개선해야 할 부분을 객관적으로 살펴보겠습니다(일부 Gopher는 그렇지 않다고 생각함).
1) 분산 컴퓨팅의 관점에서 볼 때 Go 언어는 Erlang만큼 성숙하지 않습니다(이와 관련하여 일부 Go 언어 코드 패키지가 등장했으며 이미 밝은 미래를 볼 수 있습니다).
2) 프로그램 실행 속도 측면에서 Go 언어는 Java와 비슷하지만 여전히 C만큼 좋지 않습니다(격차가 지속적으로 좁아지고 있음).
3) 타사 라이브러리의 관점에서 볼 때 Go 언어 라이브러리의 수는 다른 여러 주류 언어(Java, Python, Ruby 등)에 비해 훨씬 적습니다. 그러나 Go 언어의 시대에 비해 이미 이를 사용하여 구현된 타사 라이브러리가 꽤 많이 있으며 그 수는 계속해서 빠르게 증가하고 있습니다.
또한 Go 언어 표준 라이브러리에는 아래에 자세히 설명된 것처럼 더 깊은 수준에서 몇 가지 만족스럽지 못한 측면도 있습니다.
1) 언어 구문의 관점에서 볼 때 Go 언어 구문에는 구문 설탕이 많지 않아 많은 Python 및 Ruby 애호가가 이를 무시합니다. 게다가 변수에 값을 할당하는 방법도 너무 많아서 좀 번거롭습니다. 가장 안타깝고 제가 가장 신경쓰는 점은 Go 언어가 Custom Generic Type을 지원하지 않는다는 점입니다.
2) 동시 프로그래밍의 관점에서 Go 언어가 제공하는 동시성 모델은 매우 강력하지만 이해해야 할 몇 가지 작성 규칙도 있습니다. 그렇지 않으면 "구덩이"에 들어가기 쉽습니다. 실제로 이것을 "구덩이"라고 부르는 것은 권장되지 않습니다. 왜냐하면 이러한 소위 "구덩이"의 대부분은 우리가 원리를 잘 알지 못하기 때문에 스스로 파고 있기 때문입니다.
3) 가비지 컬렉션 관점에서 Go 언어의 가비지 컬렉션은 동시 마크 앤 스윕 알고리즘(Concurrent Mark and Sweep, CMS)을 사용합니다. 동시 작업이고 직렬 작업보다 시간이 훨씬 적게 걸리지만 가비지 수집 중에 모든 사용자 프로그램의 작업이 중지됩니다. 이는 실시간 요구 사항이 상대적으로 높은 애플리케이션에 어느 정도 영향을 미칩니다. 하지만 Go 언어 1.3 이후 버전에서는 이 문제가 크게 개선되었습니다.
Go 언어에는 여전히 몇 가지 결함이 있지만 전반적으로 이미 매우 우수한 범용 프로그래밍 언어입니다. 또한 Go 언어는 향후 개발에서 성능, 신뢰성, 이식성 및 일부 기능 향상에 중점을 둘 예정이므로 위의 단점은 버전이 진행됨에 따라 점차 약화되고 사라질 것입니다.
【관련 추천: Go 비디오 튜토리얼, 프로그래밍 교육】
위 내용은 go 언어는 어떤 언어에서 빌려오나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!