Go 언어 메모 - NomadJin/Blockchain-Study GitHub Wiki
서문
- 클라우드 환경을 위한 오픈 소스 프로젝트는 상당수가 Go 언어로 작성되어 있다.
- 기본 라이브러리가 매우 탄탄.
- 실행 파일 안에 가비지 컬렉터를 내장해서 메모리 관리에 신경 쓰지 않아도 된다.
- 네이티브 바이너리 형식(가상 머신 필요X).
- 멀티 프로세서, 멀티 스레드 환경에 최적화된 설계.
UNIT 1 Go 언어란
Go 언어 특징
1.1 정적 타입, 강 타입
자료형을 커파일할 때 결정하면 정적 타입이고, 실행할 때 결정하면 동적 타입이라 한다.
1.2 컴파일 언어
컴파일 언어 - 텍스트 형태의 소스 코드를 컴파일하여 기계어 형태로 실행 파일(바이너리)을 만든다. CPU에서 바로 실행되기 때문에 속도가 빠르고 간결.
스크립트 언어 - 인터프리터가 텍스트 형태의 소스코드를 해석하여 실행. 최근 인터프리터의 느린 성능을 개선하기 위해 JIT(Just In Time) 컴파일러라고 하여 실행 시점에 기계어로 바로 컴파일 하는 방식이 등장.
1.3 가비지 컬렉션
메모리를 관리해주는 가비지 컬렉터가 실행 파일 안에 내장되어 있음. 가상 머신이 메모리 관리를 해주는 것과 차이가 있음.
1.4 병행성과 멀티코어 환경 지원
병행성 : 동시 처리의 놀리적인 개념. 단일 코어에서 스레드를 여러개 생성하여 스레드 여러 개가 시간을 쪼개어 순차적으로 실행.
병렬성 : 동시 처리의 물리적인 개념. 작업을 여러 CPU 코어에 아눠서 동시에 처리
go 키워드를 통해 함수 여러 개를 동시에 실행할 수 있다. 이렇게 실행된 함수를 고루틴이라고 하는데 스레드와 차이가 있음. 스레드는 운영체제의 커널에서 제공하는 리소스이기 때문에 많이 생성할수록 부담이 커진다.
1.5 모듈화 및 패키지 시스템
언어 자체에서 모듈화를 제공하며 인터넷에 있는 소스 코드를 바로 가져와서 사용할 수 있음. 다양한 패키지 관리 도구로 패키지 간 의존성을 쉽게 관리.
1.6 빠른 컴파일 속도
Go 언어는 헤더 파일이 없고, 소스 코드를 패키지화하여 변경된 부분만 컴파일하므로 컴파일 속도가 빠르다.또한, 문법적으로도 복잡한 요소를 최대한 줄여 컴파일 속도에 유리하게 설계함.
1.7 활용 범위
Go 언어는 웹 브라우저, 서버, 데이터베이스 등 규모가 크고 복잡한 어플리케이션을 개발하는데 적합.메모리 관리를 철저히 해야 하는 시스템 라이브러리 개발에는 적합하지 않음.