>백엔드 개발 >Golang >Go는 언어인가요?

Go는 언어인가요?

青灯夜游
青灯夜游원래의
2022-12-19 13:49:436732검색

go는 언어입니다. Go(Golang이라고도 함)는 Google에서 개발한 정적으로 강력한 형식, 컴파일, 동시 및 가비지 수집 프로그래밍 언어입니다. Go는 컴파일러를 사용하여 코드를 컴파일하는 컴파일 언어입니다. 컴파일러는 소스 코드를 바이너리(또는 바이트코드) 형식으로 컴파일합니다. 컴파일러는 오류를 확인하고 성능을 최적화하며 다양한 플랫폼에서 실행될 수 있는 바이너리를 출력합니다.

Go는 언어인가요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

go는 언어입니다.

Go(Golang이라고도 함)는 Google의 Robert Griesemer, Rob Pike 및 Ken Thompson이 개발한 정적으로 강력한 형식의 컴파일 언어입니다. Go 언어 구문은 C와 유사하지만 그 기능에는 메모리 안전성, GC(가비지 수집), 구조적 형식 및 CSP 스타일 동시 컴퓨팅이 포함됩니다.

Go 언어는 때때로 "C와 유사한 언어" 또는 "21세기의 C 언어"로 설명됩니다. Go는 C 언어에서 유사한 표현식 구문, 제어 흐름 구조, 기본 데이터 유형, 호출 매개변수 값 전송, 포인터 및 기타 여러 아이디어를 상속합니다. 또한 C 언어가 항상 중요하게 생각하는 컴파일된 기계 코드의 실행 효율성을 가지며 기존 Seamless와 일치합니다. 운영 체제에 적응.

Go 언어에는 클래스와 상속의 개념이 없기 때문에 Java나 C++와 동일해 보이지 않습니다. 그러나 인터페이스 개념을 통해 다형성을 달성합니다. Go 언어는 명확하고 이해하기 쉬운 경량 유형 시스템을 갖추고 있으며 유형 간 계층 구조가 없습니다. 따라서 Go 언어는 하이브리드 언어라고 할 수 있습니다.

Go는 컴파일된 언어입니다.

Go는 컴파일러를 사용하여 코드를 컴파일합니다. 컴파일러는 소스 코드를 바이너리(또는 바이트코드) 형식으로 컴파일합니다. 컴파일러는 오류를 확인하고 성능을 최적화하며 다양한 플랫폼에서 실행될 수 있는 바이너리를 출력합니다. Go 프로그램을 만들고 실행하려면 프로그래머는 다음 단계를 수행해야 합니다.

  • 텍스트 편집기를 사용하여 Go 프로그램을 만듭니다.

  • 파일을 저장합니다.

  • 프로그램을 컴파일합니다.

  • 이것은 컴파일 단계가 포함되지 않는 Python, Ruby 및 JavaScript와 같은 언어와 다릅니다. Go에는 컴파일러가 함께 제공되므로 별도의 컴파일러를 설치할 필요가 없습니다.

Go 언어를 배워야 하는 이유

시스템 프로그램이나 네트워크 기반 프로그램을 만들고 싶다면 Go 언어가 아주 좋은 선택입니다. 비교적 새로운 언어인 이 언어는 경험 많고 존경받는 컴퓨터 과학자들이 대규모 동시 네트워크 프로그램을 만드는 문제를 해결하기 위해 설계했습니다. Go 언어가 등장하기 전에 개발자들은 항상 실행 속도가 빠르지만 이상적인 컴파일 속도가 아닌 언어(예: C++)를 사용할지, 아니면 컴파일 속도가 빠른 언어를 사용할지 매우 어려운 선택에 직면했습니다. 속도는 느리지만 실행 효율성이 떨어지는 언어(예: .NET, Java) 또는 개발이 덜 어렵지만 평균 실행 속도를 갖는 동적 언어가 있습니까? 분명히 Go 언어는 빠른 컴파일, 효율적인 실행 및 손쉬운 개발이라는 세 가지 조건 사이에서 최상의 균형을 달성합니다.

Go 언어는 크로스 컴파일을 지원합니다. 예를 들어 Linux 시스템을 실행하는 컴퓨터에서 Windows에서 실행할 수 있는 애플리케이션을 개발할 수 있습니다. 이는 UTF-8을 완벽하게 지원하는 최초의 프로그래밍 언어입니다. 이는 UTF-8로 인코딩된 문자열을 처리할 수 있을 뿐만 아니라 소스 코드 파일 형식도 UTF-8 인코딩을 사용한다는 사실에 반영됩니다. Go 언어는 정말 국제적입니다!

Go 언어의 특징

간단한 구문

  • 문법 스타일을 제쳐두고 유형 및 규칙 측면에서만 Go는 C99 및 C11과 많은 유사점이 있습니다. 이것이 바로 중요한 Go 언어가 중요한 이유라고 불리는 이유입니다. "NextC"라는 이름을 위해.

  • Go 언어의 문법은 단순성과 복잡성이라는 두 가지 극단에 있습니다. C 언어는 매우 간단하여 코드 한 줄을 작성할 때마다 컴파일 후의 모습, 명령 실행 방법, 메모리 할당 방법 등을 머릿속으로 상상할 수 있습니다. C의 복잡성은 모호하고 관련 없는 규칙이 너무 많아서 정말 골치 아픈 문제입니다. 이에 비해 Go는 처음부터 시작하고 역사적 짐이 없습니다. 많은 경험과 교훈을 얻은 후에는 엄격한 규칙과 간단한 구성으로 처음부터 세상을 계획할 수 있습니다.

Go 언어의 문법 규칙은 엄격하고 모호함도 없으며 흑마법의 변형도 없습니다. 누구나 작성하는 코드는 기본적으로 동일하므로 Go 언어를 쉽게 배울 수 있습니다. 더 나은 유지 관리성을 위해 "유연성"과 "자유성"의 일부를 포기할 가치가 있다고 생각합니다.

"++" 및 "--"를 연산자에서 명령문으로 다운그레이드하고 포인터를 유지하지만 기본적으로 포인터 작업을 방지하며 이점이 분명합니다. 또한 슬라이스와 사전을 내장 유형으로 사용하고 이를 런타임 수준에서 최적화하는 것도 "간단"한 것으로 간주됩니다.

동시성 모델

오늘날 동시 프로그래밍은 프로그래머의 기본 기술이 되었으며, 다양한 기술 커뮤니티에서 관련 토론 주제를 많이 볼 수 있습니다. 이 경우 Go 언어는 매우 대담하고 독특하며 기본적으로 모든 것을 동시에 수행하여 런타임 중에 main.main 항목 기능을 포함하여 모든 것을 실행합니다.

고루틴은 Go의 가장 중요한 기능이라고 할 수 있습니다. 동시 단위를 처리하기 위해 코루틴과 유사한 접근 방식을 사용하지만 런타임 수준에서 더 심층적인 최적화도 수행합니다. 이는 구문상 동시 프로그래밍을 매우 쉽게 만듭니다. 콜백을 처리할 필요도 없고 스레드 전환에 주의를 기울일 필요도 없으며 단 하나의 키워드만 있으면 간단하고 자연스럽습니다.

CSP 모델을 구현하려면 채널을 사용하세요. 동시 유닛 간의 데이터 결합을 분리하고 각각이 자신의 임무를 수행할 수 있도록 허용하는 것은 메모리 공유 및 잠금 세분화로 어려움을 겪는 모든 개발자에게 반가운 안도감을 줍니다. 아쉬운 점이 있다면 진정한 유통을 위해 프로세스 내부에서 프로세스 외부로 소통을 확대하는 더 큰 방안이 필요하다는 점이다.

  • 메모리 할당

모든 것을 동시화하는 것은 좋지만 많은 문제를 가져옵니다. 높은 동시성에서 메모리 할당 및 관리를 달성하는 방법은 어려운 문제입니다. 다행히 Go는 동시성을 위해 설계된 고성능 메모리 할당 구성 요소인 tcmalloc을 선택했습니다.

메모리 할당자는 런타임의 세 가지 주요 구성 요소 중 가장 적게 변경되는 부분이라고 할 수 있습니다. 가비지 컬렉터와 협력하도록 수정된 내용을 제외하면 메모리 할당자는 tcmalloc의 원래 구조를 완전히 유지합니다. 캐시를 사용하여 현재 실행 스레드에 잠금 없는 할당을 제공하고 여러 중앙을 사용하여 여러 스레드 간에 메모리 장치 재사용의 균형을 맞춥니다. 더 높은 수준에서 힙은 대규모 메모리 블록을 관리하고 이를 재사용된 메모리 블록의 여러 수준으로 나눕니다. 빠른 할당 및 보조 메모리 밸런싱 메커니즘을 통해 메모리 할당자는 높은 압력 하에서 메모리 관리 작업을 훌륭하게 완료할 수 있습니다.

최신 버전에서는 컴파일러 최적화가 매우 효과적이었습니다. 가비지 수집 압력을 줄이고 관리 소비를 줄이며 실행 성능을 향상시키기 위해 스택에 개체를 할당하는 데 최선을 다할 것입니다. 객체 풀 사용과 자율적인 메모리 관리를 강제하는 간헐적인 성능 문제를 제외하면 기본적으로 메모리 관리 작업에 참여할 필요가 없다고 말할 수 있습니다.

  • 쓰레기 수집

쓰레기 수집은 항상 문제가 되어 왔습니다. 초기에 Java는 비효율적인 가비지 수집으로 인해 오랫동안 조롱을 받았습니다. 이후 Sun은 계속해서 많은 인력과 기술을 통합하여 오늘날에 이르렀습니다. 그러나 그럼에도 불구하고 Hadoop과 같은 대용량 메모리 애플리케이션 시나리오에서는 가비지 수집이 여전히 확장되고 어렵습니다.

Java에 비해 Go는 더 어려움에 직면합니다. 포인터가 존재하기 때문에 회수된 메모리는 축소될 수 없습니다. 다행스럽게도 포인터 연산이 차단되어 있습니다. 그렇지 않으면 정확한 재활용을 달성하기 어려울 수 있습니다.

업그레이드할 때마다 가비지 수집기는 핵심 구성 요소 중 가장 많이 수정된 부분이어야 합니다. 동시 정리부터 STW 시간 단축, Go 버전 1.5가 동시 표시를 구현하고 점차적으로 3색 표시 및 쓰기 장벽 등을 도입할 때까지 모두 사용자 논리에 영향을 주지 않고 가비지 수집 작업을 더 효과적으로 만들기 위한 것입니다. 이러한 노력에도 불구하고 현재 버전의 가비지 컬렉션 알고리즘은 사용 가능하다고만 할 수 있으며, 유용하게 사용되기까지는 아직 갈 길이 멉니다.

  • 정적 링크

Go가 처음 출시되었을 때 정적 링크가 장점으로 홍보되었습니다. 아무것도 첨부하지 않고 컴파일된 실행 파일만 배포할 수 있습니다. 이것은 좋은 생각인 것처럼 보였지만, 추세가 바뀌었습니다. 여러 연속 버전에서 컴파일러는 동적 라이브러리의 빌드 모드 기능을 개선해 왔으며 상황은 한동안 다소 당황스러워졌습니다.

지금은 완료되지 않은 빌드 모드 모드를 제쳐두더라도 정적 컴파일의 이점은 분명합니다. 런타임 및 종속 라이브러리는 실행 파일에 직접 패키징되어 배포 및 릴리스 작업이 단순화됩니다. 운영 환경을 설치하고 많은 타사 라이브러리를 미리 다운로드할 필요가 없습니다. 라이브러리 종속성은 항상 문제가 되어 왔기 때문에 이 간단한 접근 방식은 시스템 소프트웨어 작성에 큰 이점이 있습니다.

  • 표준 라이브러리

완전한 기능과 안정적인 품질을 갖춘 표준 라이브러리는 프로그래밍 언어에 충분한 성능을 제공합니다. 대부분의 기본 기능 개발은 타사 확장의 도움 없이 완료할 수 있으므로 학습 및 사용 비용이 크게 절감됩니다. 가장 중요한 점은 표준 라이브러리의 업그레이드 및 복구가 보장되며, 타사 라이브러리에서는 사용할 수 없는 런타임에서 심층적인 최적화의 편의성을 얻을 수도 있다는 것입니다.

Go 표준 라이브러리가 완전히 포함되지는 않지만 여전히 매우 풍부합니다. 가장 칭찬할 만한 것 중 하나는 몇 가지 간단한 명령문만으로 고성능 웹 서버를 구현할 수 있는 net/http입니다. 이는 항상 주목을 받아 왔습니다. 게다가 이를 기반으로 한 다수의 뛰어난 타사 프레임워크는 Go를 웹/마이크로서비스 개발 표준 중 하나의 위치로 끌어올렸습니다.

물론 우수한 타사 리소스도 언어 생태계의 중요한 부분입니다. 최근 몇 년 동안 등장한 여러 언어 중에서 Go는 독특하고 우수한 작품이 많이 등장하며, 이는 Go를 배우는 데 좋은 참고 자료이기도 합니다.

  • 툴체인

완벽한 도구 체인은 일상적인 개발에 매우 ​​중요합니다. Go는 컴파일, 형식 지정, 오류 확인, 도움말 문서, 타사 패키지 다운로드 및 업데이트를 위한 해당 도구를 사용하여 여기에서 꽤 훌륭한 작업을 수행했습니다. 기능이 완벽하지는 않더라도 최소한 간단하고 사용하기 쉽습니다.

단위 테스트, 성능 테스트, 코드 적용 범위, 데이터 경쟁 및 튜닝을 위한 pprof를 포함한 완벽한 테스트 프레임워크가 내장되어 있으며 이는 코드가 정확하고 안정적으로 실행되도록 하는 데 필수적인 도구입니다.

또한 런타임 모니터링 정보는 환경 변수, 특히 가비지 수집 및 동시 예약 추적을 통해 출력될 수도 있으며, 이는 알고리즘을 개선하고 더 나은 런타임 성능을 얻는 데 더욱 도움이 될 수 있습니다.

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !

위 내용은 Go는 언어인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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