>  기사  >  백엔드 개발  >  Go 언어는 오픈 소스인가요?

Go 언어는 오픈 소스인가요?

青灯夜游
青灯夜游원래의
2022-11-29 18:42:496676검색

go 언어는 오픈 소스입니다. Go 언어는 2009년 11월에 공식적으로 발표되었으며 오픈 소스 프로젝트가 되었습니다. Linux 및 Mac OS X 플랫폼에서 구현되었으며 나중에 Windows 시스템에 추가되었습니다. Go 언어는 BSD 오픈 소스 프로토콜을 채택합니다. BSD 오픈소스 라이선스는 사용자에게 자유롭게 사용할 수 있고, 소스코드를 수정하고, 수정된 코드를 오픈소스 또는 독점 소프트웨어로 다시 출시할 수 있는 자유를 제공하는 라이선스입니다.

Go 언어는 오픈 소스인가요?

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

go 언어 - 오픈 소스 프로그래밍 언어


Go(Golang이라고도 함)는 Google에서 개발한 정적으로 강력한 형식, 컴파일, 동시 및 가비지 수집 프로그래밍 언어입니다.

Robert Griesemer, Rob Pike 및 Ken Thompson은 2007년 9월에 Go 디자인을 시작했으며 나중에 Ian Lance Taylor 및 Russ Cox 프로젝트에 합류했습니다. Go는 Inferno 운영 체제를 기반으로 개발되었습니다. Go는 2009년 11월에 공식적으로 오픈 소스 프로젝트로 발표되었으며 Linux 및 Mac OS X 플랫폼에서 구현되었으며 나중에 Windows 시스템에서의 구현이 추가되었습니다.

간단히 말하면 Go 언어는 오픈 소스이며 BSD 라이센스를 채택합니다.

BSD 오픈 소스 프로토콜은 사용자에게 많은 자유를 제공하는 프로토콜입니다. 자유롭게 사용할 수 있고, 소스 코드를 수정하고, 수정된 코드를 오픈 소스 또는 독점 소프트웨어로 다시 출시할 수 있습니다. BSD 프로토콜을 사용하는 코드를 출시하거나 BSD 프로토콜 코드를 기반으로 자체 제품을 개발하는 경우 다음 세 가지 조건을 충족해야 합니다.

  • 다시 출시된 제품에 소스 코드가 포함된 경우 소스 코드 BSD 프로토콜 원본 코드에 포함되어야 합니다.

  • 바이너리 클래스 라이브러리/소프트웨어만 재배포하는 경우 클래스 라이브러리/소프트웨어의 문서 및 저작권 설명에 있는 원본 코드에 BSD 프로토콜을 포함해야 합니다.

  • 오픈소스 코드의 작성자/단체명, 원본 제품명을 마케팅 목적으로 사용할 수 없습니다.

BSD 코드는 코드 공유를 장려하지만 코드 작성자의 저작권은 존중되어야 합니다. BSD는 사용자가 코드를 수정하고 재배포할 수 있도록 하며, BSD 코드를 사용하거나 개발하여 상용 소프트웨어를 출시 및 판매할 수 있도록 하기 때문에 상업적 통합에 친화적인 프로토콜입니다. 많은 회사에서는 오픈 소스 제품을 선택할 때 BSD 프로토콜을 선호합니다. 왜냐하면 BSD 프로토콜은 이러한 타사 코드를 완전히 제어할 수 있고 필요할 때 수정하거나 재개발할 수 있기 때문입니다.

Go 언어는 오픈 소스인가요?

언어 설명으로 가기


2007년, C++에 싫증이 난 구글의 수석 소프트웨어 엔지니어 Rob Pike는 두 명의 재능 있는 사람, Robert Griesemer와 Ken Thompson을 모아서 새로운 언어를 만들기로 결정했습니다. C++를 대체하세요. 이것은 Golang입니다. 21세기에 등장한 GO 언어는 예상대로 C++를 대체할 수는 없지만 C에 가까운 실행 성능, 분석에 가까운 언어 개발 효율성, 완벽에 가까운 컴파일 속도는 전 세계적으로 인기를 끌고 있습니다. 특히 클라우드 프로젝트에서는 대부분 Golang을 사용하여 개발되고 있습니다. Golang은 이미 사람들의 마음속에 깊이 뿌리내리고 있다고 할 수 있습니다. 역사적 부담이 없는 새로운 프로젝트라면 Golang이 최선의 선택이 될 수도 있습니다.

GO 언어의 아버지로 알려진 롭 파이크(Rob Pike)는 GO 언어에 동의하는지 여부는 적은 것이 더 많거나 적다는 것에 동의하는지 여부에 달려 있다고 말했습니다(Less is more or less is less). Rob Pike는 GO 언어의 전체 디자인 철학을 매우 간단한 방식으로 요약합니다. 즉 단순성과 실용성을 최대한 구현합니다.

많은 사람들이 GO 언어를 21세기 C 언어라고 부릅니다. 왜냐하면 GO는 C의 단순성과 성능뿐만 아니라 21세기 인터넷 환경에서 서버 측 개발을 위한 다양한 실용적인 기능을 제공하여 개발자가 다음을 수행할 수 있기 때문입니다. 언어 수준에서 원하는 것을 쉽게 얻을 수 있습니다.

Go 언어는 Google이 2009년에 출시한 두 번째 오픈 소스 프로그래밍 언어입니다. Go 언어는 다중 프로세서 시스템 애플리케이션 프로그래밍에 특별히 최적화되어 있습니다. Go를 사용하여 컴파일된 프로그램은 C 또는 C++ 코드만큼 빠르고, 더 안전하며, 병렬 프로세스를 지원합니다.

1. 개발팀

Go 언어는 오픈 소스인가요?

GO 언어 개발 진영의 주요 멤버 중에는 컴퓨터 소프트웨어 업계의 역사적 인물들이 있으며, 이들은 컴퓨터 발전에 지대한 영향을 끼쳤습니다. 소프트웨어. Bell Labs의 Ken Thompson은 B 언어를 설계하고 Unix 운영 체제(처음에는 B 언어로 구현됨)를 만들었습니다. 나중에 Unix를 개발하는 동안 Dennis Ritchie와 함께 C 언어를 설계한 후 C 언어를 사용하여 재구성했습니다. 언어. 유닉스 운영체제. 데니스 리치(Dennis Ritchie)와 켄 톰슨(Ken Thompson)은 유닉스와 C 언어의 아버지로 알려져 있으며, 컴퓨터 소프트웨어 개발에 대한 뛰어난 공헌을 인정받아 1983년에 튜링상(Turing Award)을 공동으로 수상했습니다. 역시 Bell Labs의 Rob Pike는 Unix 팀의 중요한 멤버입니다. 그는 Limbo 언어를 발명하고 Ken Thompson과 함께 UTF-8 인코딩을 공동 설계했습니다. 그는 "Unix 프로그래밍 환경" 및 "프로그래밍"의 저자 중 한 명입니다. 관행".

2. Go 언어의 특징

  • 자동 가비지 수집으로 개발 난이도 감소
    메모리 및 리소스 관리는 항상 매우 답답한 문제였습니다. 다른 언어(예: C 또는 C++)에서는 이 메모리를 사용하기 전에 할당한 다음 사용 후 해제해야 합니다. 작은 실수로 인해 메모리 누수가 발생하여 프로그램이나 시스템이 충돌할 수도 있습니다. Go 언어의 현대적인 가비지 수집 메커니즘은 개발의 어려움을 크게 줄이고, 흥미롭지 않은 메모리 관리를 전문 컴파일러에게 맡기고, 프로그래머가 보다 흥미로운 일에 집중할 수 있도록 해줍니다.

  • 함수에 대한 다중 반환 값 지원
    현재 Python을 제외한 대부분의 주류 언어는 기본적으로 함수에 대한 다중 반환 값을 지원하지 않지만 많은 경우 개발자에게 이 기능이 매우 필요합니다. Go 언어의 다중 반환 값 기능을 사용하면 개발자는 더 이상 다중 값을 반환하기 위해

  • 아름다운 오류 처리 사양
    을 정의할 필요가 없습니다. Go 언어는 표준 오류 처리 프로세스에 defer 키워드를 도입하고 다음을 제공합니다. -in 함수에서 패닉 및 복구는 예외 발생 및 잡기를 완료하는 데 사용됩니다. C++ 및 Java와 같은 언어의 예외 포착 메커니즘과 비교할 때 Go 언어의 오류 처리 메커니즘은 개발자가 더 이상 많은 수의 try-catch 문을 추가할 필요가 없습니다. 프로그램 안전을 위해.
    Golang은 try...catch와 같은 구조화된 예외 해결 방법을 지원하지 않습니다. 왜냐하면 코드 양이 늘어나고 남용될 것이라고 느끼기 때문입니다. 예외가 아무리 작더라도 발생하게 됩니다. golang이 주장하는 예외 처리 방법은 다음과 같습니다.

    • 일반적인 예외: 호출 수신자는 오류 객체를 반환하고 호출자는 오류 객체를 결정합니다.
    • 심각한 예외: 지연...복구...패닉 메커니즘을 사용하여 캡처 및 처리되는 중단성 패닉(예: 0으로 나누기)을 나타냅니다. 심각한 예외는 일반적으로 golang에 의해 내부적으로 자동으로 발생하며 사용자가 이를 적극적으로 발생시킬 것을 요구하지 않으므로 전통적인 try...catch가 모든 곳에 작성되는 상황을 피할 수 있습니다. 물론 사용자는 패닉('xxxx')을 사용하여 적극적으로 예외를 던질 수도 있지만 이렇게 하면 이 메커니즘이 구조화된 예외 메커니즘으로 변질됩니다.
  • 동시 프로그래밍
    Go 언어는 동시 프로그래밍 측면에서 대부분의 언어보다 훨씬 간단합니다. 이는 Go 언어의 가장 큰 특징 중 하나이자 높은 동시성 및 고성능에 진입하기 위한 중요한 협상 칩입니다. 미래의 시나리오.
    전통적인 다중 프로세스 또는 다중 스레드와 달리 golang의 동시 실행 단위는 고루틴이라는 코루틴입니다.
    오늘날의 멀티 코어 시대에 동시 프로그래밍의 중요성은 자명합니다. 물론 많은 언어가 멀티스레드, 멀티프로세스 프로그래밍을 지원하지만, 안타깝게도 이를 구현하고 제어하는 ​​것은 그리 쉽고 즐겁지 않습니다. Golang과의 차이점은 언어 수준에서 코루틴(고루틴) 동시성을 지원한다는 것입니다(코루틴은 마이크로 스레드라고도 하며 스레드보다 가볍고 저렴하며 성능이 뛰어납니다). 언어 수준에서는 작동이 매우 간단합니다. 키워드 (go) 코루틴을 시작하는 데 사용되며, 동일한 시스템에서 수천 개의 코루틴을 시작할 수 있습니다.

  • 네트워크 프로그래밍
    golang은 인터넷 시대에 탄생했기 때문에 본질적으로 분산화되어 있으며, 그 특징 중 하나는 net.Dial을 사용하는 소켓(tcp 기반)과 같은 풍부하고 편리한 네트워크 프로그래밍 인터페이스를 제공한다는 것입니다. /udp(기존 연결, 청취, 승인 및 기타 인터페이스를 캡슐화함), http는 http.Get/Post()를 사용하고, rpc는 client.Call('class_name.method_name', args, &reply) 등을 사용합니다.

  • Compilation
    컴파일된 Go 프로그램을 실행하는 데에는 Java의 jdk 또는 js 노드와 같은 실행 환경을 추가로 설치할 필요가 없습니다. 동시에 Go는 기본 크로스 컴파일 지원을 제공하므로 크로스 플랫폼 개발 및 배포가 매우 편리합니다. .
    물론 컴파일과 실행이 더 나은 운영 효율성을 가져오기도 쉽지만, 이 점에 있어서 미신을 믿어서는 안 됩니다. 점점 더 "해석된" 프로그래밍 언어 운영 환경이 JIT를 지원하기 시작했습니다. 성능 이점이 덜 분명해집니다.

3. Go 언어 사용 시나리오

Go 언어의 특성과 원래 설계 의도로 볼 때 Go 언어는 서버 프로그래밍 언어로서 로그 처리, 데이터 패키징, 가상 머신 처리, 파일 시스템, 분산 시스템, 데이터베이스 에이전트 등 네트워크 프로그래밍 측면에서 Go 언어는 웹 애플리케이션, API 애플리케이션, 다운로드 애플리케이션 등에 널리 사용됩니다. 또한 Go 언어는 메모리 내 데이터베이스 및 클라우드에도 적합합니다. 플랫폼 분야 현재 많은 외국 클라우드 플랫폼이 Go를 사용하여 개발되고 있습니다.

  • 서버 프로그래밍, 이전에 C 또는 C++를 사용하여 이러한 작업을 수행했다면 로그 처리, 데이터 패키징, 가상 머신 처리, 파일 시스템 등과 같은 작업을 수행하는 데 Go가 매우 적합합니다.

  • Etcd와 같은 분산 시스템, 데이터베이스 브로커, 미들웨어 등.

  • 네트워크 프로그래밍은 현재 웹 애플리케이션, API 애플리케이션, 다운로드 애플리케이션을 포함하여 가장 널리 사용되며 Go의 내장 net/http 패키지는 기본적으로 우리가 일반적으로 사용하는 모든 네트워크 기능을 구현합니다.

  • 데이터베이스 운영

  • 클라우드 플랫폼 개발 현재 많은 해외 ​​클라우드 플랫폼에서 Go 개발을 활용하고 있습니다.

서버 측 서비스의 비즈니스 로직을 구현하며 C++, Java, Ruby, Python 및 Php에 대한 좋은 대안입니다. 또한 높은 동시성 미들웨어를 구현하는 데에도 사용할 수 있습니다.

go 언어와 다른 오픈 소스 언어 비교


  • 개발 효율성 GO 언어는 사용이 간편하고, 코드 설명 효율성이 높고, 코딩 표준이 통일되어 있으며, 시작이 빠릅니다.

1. Go 언어 디자인의 원래 의도

Open go 05. Go 언어와 다른 언어의 비교 ​
참고 URL: https://studygolang.com/articles/24885

Go hope 인터넷 시대의 C언어가 되어보세요. 대부분의 시스템 수준 언어(Java 및 C# 포함)의 기본 프로그래밍 철학은 C++에서 유래하여 C++의 객체 지향 특성을 더욱 발전시킵니다. 하지만 Go 언어의 설계자들은 C 언어를 배울 가치가 있다고 생각합니다. C 언어의 지속적인 인기의 근원은 그것이 충분히 단순하다는 것입니다. 따라서 Go 언어는 충분히 간단합니다.

Go는 대규모 시스템을 개발하는 사람들을 위해 설계되었습니다. 언어 설계를 공부하기 위한 것이 아니라 프로그래밍을 더욱 편안하고 편리하게 만들기 위한 것입니다. **

그러나 C 부서에서 온 많은 엔지니어와 같은 당시 Google의 내부 현실과 결합하여 새로 설계된 언어는 배우기 쉬워야 하며 C와 유사한 언어가 더 좋습니다. 20년. 그래서 새로 디자인된 언어는 현대적이어야 합니다(예: 내장 GC). 마지막으로 실제 경험을 바탕으로 목표에 맞게 Go 언어를 설계했습니다.

2. Go 언어와 JAVA

컴파일 언어, 보통 속도(2.67s),현재 Taobao, JD.com 등 대규모 웹사이트는 Java로 작성됩니다. 주요 특징은 안정성, 우수한 오픈 소스, 자체 작성 사양 세트, 적당한 개발 효율성이며 현재 가장 주류 언어입니다.

3. Go 언어와 C/C++

  • C
    은 빠른 실행 속도(4.28), 중간 정도의 학습 난이도, 중간 정도의 개발 속도를 갖습니다. 하지만 C#의 많은 단점으로 인해 JD.com, Ctrip 등 대형 웹사이트의 전신은 모두 C#으로 개발되었으나 현재는 Java로 마이그레이션되었습니다.

  • C/C++
    기존 프로그래밍 언어의 조상이며 다른 모든 언어가 탄생했습니다. 가장 빠른 실행 속도는 타의 추종을 불허합니다. 하지만 작성하기가 가장 복잡하고 개발하기가 어렵습니다.

언어 특성상 Java와 C는 상당히 다르지만 go와 C는 더 가깝습니다.

4. Go 언어와 Python

2019년에는 Python, Golang, Java, C++ 중에서 어떻게 선택해야 할까요?
참조 URL: https://zhuanlan.zhihu.com/p/65177007
비교 학습: Golang VS Python3
참조 URL: https://zhuanlan.zhihu.com/p/65613337

Golang과 Python 모두 현재 해당 분야에서 가장 인기 있는 개발 언어 중 하나입니다.

Golang의 효율적이고 친숙한 구문은 많은 백엔드 개발자의 호감을 얻었으며 동시성 네트워크 프로그래밍에 가장 적합한 언어 중 하나입니다.

말할 필요도 없이 Python은 TIOBE 순위 상위 10위권 영주권자 중 하나이며 현재 상위 5위권에서 안정되었습니다. 머신러닝, AI, 데이터 분석 분야에서 꼭 배워야 하는 언어가 되었습니다.

  • Python과 비교했을 때 Go는 성능에서 분명한 이점이 있습니다. 왜냐하면 해석된 언어와 컴파일된 언어의 실행 속도가 같지 않기 때문입니다. 게다가 Go는 Python보다 낫습니다. 간결한 구문과 유형 시스템 디자인.

  • 성능은 강력하지만 개발 효율성은 Python과 같은 동적 언어보다 나쁘지 않습니다. 일반적으로 기본 Python 애플리케이션보다 훨씬 더 높으며 일부 병목 현상 서비스를 작성하는 데 적합합니다. 메모리 사용량도 매우 경제적입니다.

Python
스크립팅 언어, 가장 느린(258초), 간결한 코드, 짧은 학습 진행 및 빠른 개발 속도. Douban은 Python으로 작성되었습니다. Python의 유명한 서버 프레임워크로는 django와 Flask가 있습니다. 그러나 대규모 프로젝트에서는 Python이 안정적이지 않기 때문에 Python을 사용하는 일부 회사는 나중에 Java로 마이그레이션했습니다.

【관련 추천: Go 동영상 튜토리얼

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

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