개요
Go 언어(Golang)에 대해 메모를 정리해둔다.
언어의 특징
- 컴파일언어지만 컴파일 속도가 매우 빠르기 때문에 인터프리터 언어처럼 쓸 수 있다.
- 물론 완전 인터프리터 언어보다는 컴파일 시간이 필요하므로 그 시간만큼은 필요하다. 대신에 컴파일 후의 실행 속도는 매우 빠르다.
- 정적타입 언어다.
- 단순함과 실용성을 지향하는 언어다. keyword가 25개밖에 되지 않고 (이는 자바의 절반이다.) 문법 또한 간결하다.
- 가비지 컬렉션을 지원한다. (그러나 그만큼 컴파일된 바이너리의 크기는 커지고, GC에 의한 지연이 발생한다. 바이너리의 크기나 속도가 중요한 곳에는 C나 러스트를 쓰는게 좋다. )
- Communicating Sequential Processes (CSP) 스타일의 Concurrent 프로그래밍을 지원한다.
버전 히스토리
- 2009년에 처음 릴리즈되었다고 한다.
- 2024년 5월 기준 최신버전은 1.22.0 이다.
모듈관리
- Go에서 생소하게 느껴졌던 모듈관리는 2018년 8월에 발표된 1.11 버전부터 추가되었다고 한다.
- 1.16 버전부터 GOPATH가 먹히지 않는다. 모듈이 기본 옵션이 되었다.
- go.mod가 있으면 모듈을, 없으면 gopath를 사용한다고 한다.
고루틴(Goroutine)
- 고루틴을 사용하면 병렬 프로그램하기가 좋다.
- 얼랭에서 영향받았다고 한다.
- 멀티 스레스이지만 OS에서 관리하는 스레드보다도 훨씬 경량이라고 한다.
Go의 인기, 그리고 어떨 때 Go를 사용하면 좋은가
- Tiobe에 의하면 2017년부터 급격히 인기를 끌고 있다고 한다.
- 시스템 프로그래밍 언어를 지향했지만 실제로는 서버측 앱개발에 많이 사용된다고 한다. 이는 개발 속도와 실행 속도, 병행성 사이의 적정 지점이 필요한 요구에 잘 맞기 때문이다. (자바는 장황하고, 파이썬은 느리다. 그 사이에서 잘 절충된 언어같다.)
- Docker나 쿠버네티스가 Go로 작성되었다고 한다. 따라서 컨테이너를 사용하는 프로젝트에서 궁합이 좋을 것 같다.
- 백엔드 개발언어로 최근에 급부상하고 있다.
- 또한 CLI 툴 개발에도 많이 사용된다고 한다.
- 구글에서 개발한 gRPC를 사용해야 하는 경우도 Go와 궁합이 좋을 것으로 보인다. 실제로 유명한 gRPC클라이언트인 grpcurl이나 evans등도 Go로 개발되었다.
참고
- https://namu.wiki/w/Go(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4)
- https://go.dev/doc/devel/release
- https://blog.goorm.io/hominlee/
- http://golang.site/go/basics