많은 사람들이 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 에 대해 이렇게 이야기 한다.

  1. 컴파일러 언어의 이점 : 저는 컴파일러 언어로 돌아가는 것에 대한 이점을 알고 있습니다. 컴파일러는 프로그램이 실행가능한지 여부를 이론적으로 판단하여 에러를 체크할 뿐 아니라 이후에 문제를 해결하도록 에러를 도출 합니다. Go의 특별한 능력은 아니라 할 수 있지만 Go는 인터프리터와 함께 컴파일 기능을 동시에 가지고 있습니다.
  2. 표준 포맷 : Go는 C나 PHP보다는 엄격한 코딩 포맷을 가지고 있습니다. 파이썬보다는 덜 엄격하지만, 파이썬의 포맷보다 유연합니다.
  3. 작은 언어 : Go는 아주 작고 쉽게 설치가 됩니다. 이는 프로그래밍을 배우고 시작하는데 도움을 줍니다.
  4. 많은 기능 들 : Go언어는 파이썬과 같이 많은 서버프로그램의 기능을 언어 자체에 내장하고 있습니다. 가령, 웹서버를 돌린다거나 소켓 서버를 작성하는 것, OS의 내부 기능을 엑세스하는 것등 파이썬과 거의 유사하게 이용할 수 있습니다.
  5. 쉬운 다중 작업 : Go의 채널과 go루틴은 다중작업을 쉽게 처리하도록 해줍니다. 이는 Node.js와 파이썬의 Twisted보다 나은 기능을 제공합니다. 
  6. 쉬운 시작 : Go를 배우는데 시간이 그렇게 오래 걸리지 않습니다. 개발 환경도 컴파일러와 에디터만 있으면 바로 시작 가능합니다.
  7. 빠른 개발 속도 : Go의 개발 생산성은 무척 높습니다. 언어 내부에 공용 서버 컴포넌트가 있어 복잡한 서버를 빠른 시간안에 작성 할 수 있습니다. 적은 코드는 정확한 기능을 빠르게 만든다는 것을 의미합니다.
  8. 멀티코어 지원, 높은 성능 : 언어의 실행은 놀랍게도 빠르고 안정적입니다. 심지어 파이썬으로 개발하는 사람들에게는 경이적이다는 생각까지 들 정도입니다. 파이썬과 Node.js의 런타임과는 달리 Go의 런타임은 다중 OS 쓰레드를 지원하고, 동시적인 실행기능을 지원합니다.

Go 언어는 서버, 브라우져, Database, 기타 복잡하고 큰 사이즈의 어플리케이션 개발에 유리함. 그러나 엄격한 메모리 제어를 필요로하는 시스템 라이브러리, Device Driver, OS 개발에는 적합하지 않음.


반응형

'Software Development > Go (golang)' 카테고리의 다른 글

3.1 Go - Hello World  (5) 2016.02.29
2. Go - 개발환경 구성  (458) 2016.02.28
1.3 Go 언어란? - 다른 언어와 비교  (1159) 2016.02.28
1.1 Go 언어란? - History  (518) 2016.02.27
1. Go 언어란?  (472) 2016.02.27
블로그 이미지

Good Joon

IT Professionalist Since 1999

,