1. 간결하고 유연한 문법
2. 병행 프로그래밍
3. 정적 타입 언어
4. 동적 프로그래밍
5. 쉬운 협업
6. 가비지 컬렉션 제공
7. 빠른 컴파일과 실행 속도
1. 간결하고 유연한 문법
- 간결하고 명확한 문법을 통해 코드가 단순해지고, 가독성이 높아졌다.
go의 구조체는 Type과 Method로 나뉘며 구조체(Struct)를 상속할 수 없다. 대신 다른 구조체를 포함하는 임베디드 형태로 구조체를 정의한다. 이는 과도한 상속으로 프로그램이 복잡해지는 것을 방지한다. 이를 Go에서는 조합(Composition)이라고 표현한다.

2. 병행 프로그래밍
리소스 공유가 아닌 메시지를 전달하는 방식으로 동기화 방식(Go 루틴)을 이용한다. 스레드의 공유 메모리나 프로세스의 통신보다 간결한 것이 특징이다. 루틴에서 작업 완료한 데이터는 채널(Channel)을 통해 전달된다.
3, 4 정적 타입과 동적 프로그래밍 언어
Go는 동적 언어의 개발 속도와 정적 언어의 안정성 두 장점을 모두 갖고 있다. 컴파일 기반의 정적 타입언어이지만, 동적 느낌의 코드(컴파일 없이 동작을 확인할 수 있는)를 작성할 수 있다. (정적언어는 C계열의 컴파일 언어를 뜻하고, 동적언어는 Python, JavaScript 등 스크립트 언어 쪽을 뜻한다)
5. 쉬운 협업
Go는 모든 개발자가 같은 작업 공간(Work Space)을 구성하게 해 다른 작업환경이 제 각각인 언어들에 비해 비교적 쉬운 협업을 유도했다. 이는 외부 소스를 임포트하기도 편리하다는 뜻이기도 하다. 또한 gofmt를 통해 코드 스타일을 자동으로 맞춰줘 편리하면서도 모두가 하나의 코드 스타일을 사용함으로써 이해하기도 편하게 했다.
Node.js의 npm이나 Python의 pip처럼 중앙 저장소가 아닌 원격 저장소의 URL을 패키지 이름으로 사용하면서 go get 명령을 통해 원격 소스 저장소의 패키지 소스도 로컬에서 쉽게 사용할 수 있게 해주었다. 정말 다른 언어들의 불편한 부분들을 대부분 해소하려고 한 느낌이다.
6. Java처럼 가비지컬렉션을 제공해 메모리 관리에 비교적 덜 신경쓰며 개발할 수 있다.
7. 실제로 사용할 부분만 부분 컴파일을 통해 컴파일 속도를 비약적으로 높였다.
전체적으로 현재 메인스트림에 속하는 언어들의 문제점이나 불편한 점들을 모두 개선한 완성형 언어를 만드려고 노력한 느낌이 든다. 실제로 그런지는 직접 써보며 체감해볼 예정이다 ㅎ.ㅎ
'그 외' 카테고리의 다른 글
NAVER CLOUD PLATFORM Hands-on Lab 후기 (0) | 2020.09.24 |
---|---|
MariaDB에서 Node.js를 통해 datetime 관련 이슈 (0) | 2020.09.10 |
1. go 의 if, switch, for, 함수 (0) | 2020.09.09 |
[DB] MySQL 비정상 정지시 복구 (InnoDB, MyISAM) (0) | 2020.09.09 |
[ Python ] 공공데이터 파싱과 DB 설계 (0) | 2020.08.22 |