많은 사람들이 Go 언어를 두고 높은 “생산성” 과 “성능”을 위한 언어라고 이야기 한다.
Go 언어의 주요 특징은 아래와 같다.
- 정적 타입, 강 타입
C/C++, Java 와 같이 Compile Time 에 Type 결정이 이루어 지며, 코드 내에서 암시적 형변환이 일어나지 않는다.
- 컴파일 언어
C/C++, Java, C# 등과 같이 컴파일이 필요한 언어임. Java 나 C# 과 달리 실행파일을 만들어냄. 별도의 Runtime 환경이 필요없어 실행 환경이 복잡하지 않음.
- 가비지 컬렉션
실행파일 내에 Garbage Collector 가 탑재 됨.
- 병행성(Concurrency)
Multi Thread, Multi Core 에 Go Routine 이라는 단위의 함수실행을 한 Thread 나 Core 별로 동시에 실행시킬 수 있다. Thread 와 Go Routine 은 1:N 관계를 이룰 수 있다.
- 멀티코어 환경 지원
Go Routine 간에 “채널” 을 통해 통신하여 데이터를 공유하고 실행 순서를 제어할 수 있다. 제어는 Multi Thread 의 동기화와 비슷하다.
- 모듈화 및 패키지 시스템npm, pip, gem 이나 Maven과 같은 모듈 의존성에 따른 패키지 관리를 언어 차원에서 지원. 인터넷 상의 패키지들을 바로 가져올 수 있다. import 키워드만 있으면 되며, go get 이나 go install 명령으로 자동으로 패키지들을 가져온다.
import "github.com/kylelemons/go-gypsy/yaml" ^ ^ ^ ^ | | | `-- Package name | | `-------- Project name | `------------------- Author's handle `----------------------------- Hosting site
- 빠른 컴파일 속도
C/C++ 은 헤더파일 처리 부담으로 컴파일 속도가 느리고 의존관계가 복잡함. Go 는 헤더파일이 없고 소스코드를 패키지화 하므로 변결 시 패키지만 재컴파일 함. 문법도 최대한 단순화 하여 컴파일 속도도 빠르고 생산성이 좋음.
참고로, Go 언어를 사용해본 한 개발자 분은 Go 에 대해 이렇게 이야기 한다.
- 컴파일러 언어의 이점 : 저는 컴파일러 언어로 돌아가는 것에 대한 이점을 알고 있습니다. 컴파일러는 프로그램이 실행가능한지 여부를 이론적으로 판단하여 에러를 체크할 뿐 아니라 이후에 문제를 해결하도록 에러를 도출 합니다. Go의 특별한 능력은 아니라 할 수 있지만 Go는 인터프리터와 함께 컴파일 기능을 동시에 가지고 있습니다.
- 표준 포맷 : Go는 C나 PHP보다는 엄격한 코딩 포맷을 가지고 있습니다. 파이썬보다는 덜 엄격하지만, 파이썬의 포맷보다 유연합니다.
- 작은 언어 : Go는 아주 작고 쉽게 설치가 됩니다. 이는 프로그래밍을 배우고 시작하는데 도움을 줍니다.
- 많은 기능 들 : Go언어는 파이썬과 같이 많은 서버프로그램의 기능을 언어 자체에 내장하고 있습니다. 가령, 웹서버를 돌린다거나 소켓 서버를 작성하는 것, OS의 내부 기능을 엑세스하는 것등 파이썬과 거의 유사하게 이용할 수 있습니다.
- 쉬운 다중 작업 : Go의 채널과 go루틴은 다중작업을 쉽게 처리하도록 해줍니다. 이는 Node.js와 파이썬의 Twisted보다 나은 기능을 제공합니다.
- 쉬운 시작 : Go를 배우는데 시간이 그렇게 오래 걸리지 않습니다. 개발 환경도 컴파일러와 에디터만 있으면 바로 시작 가능합니다.
- 빠른 개발 속도 : Go의 개발 생산성은 무척 높습니다. 언어 내부에 공용 서버 컴포넌트가 있어 복잡한 서버를 빠른 시간안에 작성 할 수 있습니다. 적은 코드는 정확한 기능을 빠르게 만든다는 것을 의미합니다.
- 멀티코어 지원, 높은 성능 : 언어의 실행은 놀랍게도 빠르고 안정적입니다. 심지어 파이썬으로 개발하는 사람들에게는 경이적이다는 생각까지 들 정도입니다. 파이썬과 Node.js의 런타임과는 달리 Go의 런타임은 다중 OS 쓰레드를 지원하고, 동시적인 실행기능을 지원합니다.
Go 언어는 서버, 브라우져, Database, 기타 복잡하고 큰 사이즈의 어플리케이션 개발에 유리함. 그러나 엄격한 메모리 제어를 필요로하는 시스템 라이브러리, Device Driver, OS 개발에는 적합하지 않음.
반응형
'Software Development > Go (golang)' 카테고리의 다른 글
3.1 Go - Hello World (0) | 2016.02.29 |
---|---|
2. Go - 개발환경 구성 (0) | 2016.02.28 |
1.3 Go 언어란? - 다른 언어와 비교 (0) | 2016.02.28 |
1.1 Go 언어란? - History (0) | 2016.02.27 |
1. Go 언어란? (0) | 2016.02.27 |