-
What is Golang?Language/Golang 2023. 2. 6. 20:46
Golang 이란?
2007년 Google 에서 설계된 신규 프로그래밍 언어로써,
간결하고 신뢰도 있는 효율적인 소프트웨어 개발을 위한 오픈소스 프로그래밍 언어입니다.
정확한 명칭은 Go 입니다. 하지만 Go 로 명시된것들이 너무 많기 때문에 편의에 의해서 Golang이라고도 불립니다.
간단한 Go 의 예시는 GoPlayGround(https://play.golang.org/) 에서 실행시켜볼 수 있습니다.
Go 장점
- 간결한 문법
타 언어에 비해 키워드가 적으며, 코드를 간결화 할 수 있는 다양한 문법을 제공합니다. - 컴파일 속도
타 언어에 비해 직접적으로 참조하는 라이브러리만을 해석하여 컴파일하기 때문에 보다 빠르며
컴파일 언어인데도 불구하고 인터프리터 수준의 컴파일 속도를 냅니다. - GC
C/C++ 과 같이 메모리 할당 및 사용에 대해서 별도로 free 해줄 필요가 없는
별도의 Garbage Collection 기능이 존재합니다. - 동시성
GoRoutine은 타 언어의 쓰레드와 동일한 기능을 하지만 보다 적은 자원으로 활용 가능합니다.
별도의 함수 포멧이나 파라미터 제약이 존재하지 않기 때문에 쓰레드 기능 구현에 편리하며,
각 쓰레드간 데이터 통신이 수월합니다. - Native Binary
빌드를 통한 실행파일이 바이너리 형태로 발생됩니다. Python 은 PyInstaller 라는 Tool 을 설치해야 하며, Java 는 Jdk 혹은 Jre 가 설치되어 있어야 실행할 수 있는것과 달리 바이너리만을 통한 실행이 가능합니다. 그러나 바이트 코드를 생성하는 언어가 아니므로 바이너리만 배포하는 경우 (C와 C++처럼) 타겟 머신에 맞추어 각각 컴파일을 해야해야합니다. - 채널 기반 언어
Go는 대표적인 채널 기반 언어입니다. 스레드라는 것을 명시적으로 주지 않고 고루틴을 생성하면 알아서 스레드를 생성해주고 적절한 스레드에 고루틴을 할당합니다. goroutine 사이의 커뮤니케이션을 전부 채널을 통해서 한다면 동기화 문제를 신경 쓰지 않아도 된됩니다. - 인터페이스 기반의 다형성
Go에서 다형성을 가진 코드를 작성하는 유일한 방법은 인터페이스를 인자로 넘기는 것입니다. 이 덕분에 인터페이스 단위의 추상화가 자연스럽게 이루어집니다. - 풍부한 기본 모듈
자체 제공하는 패키지들이 강력해서 별도의 웹 프레임워크를 사용하지 않아도 웹을 개발할 수 있습니다. 파이썬으로 순수 웹 개발이 힘들기에 Django, flask 프레임워크를 사용하는 것에 대조됩니다. - 정적 타입, 강 타입
C/C++, Java 와 같이 Compile Time 에 Type 결정이 이루어 지며, 코드 내에서 암시적 형변환이 일어나지 않습니다.
Go 단점
- Error 처리
try~catch 와 같은 예외처리 문법이 존재하지 않기 때문에 각 항목별로 Error 처리가 필요한 경우 일일이 체크해야하는 불편함이 있습니다. - 코드 기반의 검색
각 기능별, 용도별, 항목별로 코드를 파일별로 분리할 수 있으나, 전역변수나 함수선언부 등에 대해서 찾을 수 있는 기능이 없으며 실제 파일별로 열어 확인해야함으로 차후 기능변경이 필요한경우 연계된 함수나 호출에 대하여 찾기 어렵습니다. - 개발 IDE
다양하고 편의성 넘치는 Visual Studio 나 이클립스, IntelliJ 등과 같은 IDE가 존재하지 않습니다. - 중앙 저장소의 부재
Git 에 올라온 패키지를 go get 명령을 사용하여 다운로드 및 설치해서 활용해야 합니다. - 국내 사용처
국내에서 Go 를 활용하고 있는 회사가 적습니다. 따라서 실 운영에서 장단점에 대해서 추가적으로 얻을수 있는 정보가 많지 않습니다. - 타언어와의 연동성
Go는 C/C++ 을 기반으로 하고 있지만, 실제 C/C++ 모듈과 연동시 제약사항이 많습니다. - 성능
완전히 최적화 되어있는 동일기능의 프로그램을 대상으로는 Rust 및 C/C++ 보다 느립니다.
Go를 사용하는 제품
Go를 사용하는 프로젝트 혹은 Go로 작성된 일부 저명한 오픈 소스 소프트웨어
Name Description 라이트닝 네트워크 비트코인 네트워크 CockroachDB SQL 데이터베이스 도커 리눅스 컨테이너를 배치시키는 도구들의 집합 Doozer 매니지드 호스팅 제공자 헤로쿠의 락 서비스 Geth 이더리움 프로토콜 블록체인 기술을 이용한 golang 구현체로서, 전 세계 공유 컴퓨팅 플랫폼을 구현한다. Gogs 셀프 호스팅 Git 서비스. InfluxDB 고가용성과 고성능 요구사항을 필요로 하는 오픈 소스 데이터베이스 Juju 캐노니컬이 주관하는 서비스 오케스트레이션 도구. (우분투 리눅스의 패키저) 쿠버네티스 컨테이너 관리 소프트웨어 오픈시프트 클라우드 컴퓨팅 플랫폼 (Redhat) Packer 여러 플랫폼을 대상으로 하나의 소스 구성을 통해 동일한 머신 이미지를 만드는 도구. 스내피 우분투 터치용 패키지 관리자 (캐노니컬 제작) Syncthing 오픈 소스 파일 동기화 클라이언트/서버 애플리케이션 GitLab-runner 오픈 소스 CI/CD 애플리케이션 Beego 고성능 웹 프레임워크 Martini 웹 애플리케이션/서비스용 패키지. Gorilla Go용 웹 툴킷 Enduro/X ASG 클러스터 미들웨어, 애플리케이션 서버, 분산 트랜잭션, 멀티 프로세싱 프레임워크. AeroFS 프라이빗 클라우드 파일싱크 어플라이언트 제공자 Chango Go를 사용하는 프로그래머틱 광고 회사 클라우드 파운드리 PaaS Cloudflare CDN 서비스와 분산 네임서버 CoreOS 도커 컨테이너를 활용하는 리눅스 기반 운영 체제 카우치베이스 서버 쿼리 및 인덱싱 서비스 (Couchbase 서버 내) 드롭박스 일부 중요한 구성 요소들을 파이썬에서 Go로 이관함 구글의 수많은 프로젝트 dl.google.com 등 MercadoLibre 여러 퍼블릭 API 몽고DB MongoDB 인스턴스 관리 도구 넷플릭스 서버 아키텍처의 두 부분 노바티스 내부 인벤토리 시스템용 Plug.dj 상호작용 온라인 소셜 뮤직 스트리밍 웹사이트 Replicated 도커 기반 PaaS (기업의 설치 가능 소프트웨어 제작용) SendGrid 고객 커뮤니케이션 플랫폼 사운드클라우드 수십 개의 시스템용 Splice 디지털 오디오 워크 스테이션과 통합되는 클라우드 기반 음악 제작 및 공동 작업 플랫폼 트위치 스트리밍 서비스 우버 공유 자동차 Zerodha 금융 서비스 'Language > Golang' 카테고리의 다른 글
Golang에서 Json 사용예시 (0) 2023.02.07 CGO ( Golang With C++ ) 케이스별 설명 및 예시 (0) 2023.02.07 문법 및 사용법 예시 (0) 2023.02.07 자료형 및 키워드 (0) 2023.02.07 Golang 설치 및 IDE (0) 2023.02.07 - 간결한 문법