Skip to content

Go 언어 소개

Go 란 무엇인가?

Go(일명 Golang) 는 Google 에서 개발한 정적 강타입, 컴파일형,并发형이며 가비지 컬렉션 기능을 갖춘 프로그래밍 언어입니다. Go 언어는 2007 년에 설계가 시작되었고 2009 년 11 월에 공식적으로 외부에 공개되었으며, 2012 년 3 월에 첫 번째 공식 버전인 Go 1.0 이 출시되었습니다.

Go 언어의 설계 취지는 Google 내부의 대규모 소프트웨어 개발에서 발생하는 문제를 해결하기 위한 것으로, 특히 다음과 같습니다:

  • 컴파일 속도가 느림
  • 의존성 관리가 복잡함
  • 并发 프로그래밍이 어려움
  • 코드 가독성이 낮음

주요 특징

1. 문법 간결

Go 언어의 문법은 매우 간결하며 단 25 개의 키워드만 있습니다. 다른 언어와 비교하면 다음과 같습니다:

언어키워드 수
Go25
C32
C++63
Java50
Python35

간결한 문법으로 인해 Go 언어는 배우기 쉽고 사용하기 쉬우며, 코드 스타일이 통일되어 가독성이 뛰어납니다.

2. 빠른 컴파일

Go 언어의 컴파일 속도는 매우 빠르며, 이는 다음과 같은 이점 덕분입니다:

  • 의존성 분석 최적화
  • 모듈식 컴파일
  • 효율적인 컴파일러 구현

대규모 프로젝트도 일반적으로 몇 초에서 수십 초 내에 컴파일을 완료할 수 있습니다.

3. 네이티브 并发

Go 언어는 언어 차원에서 并发를 지원하며 두 가지 并发 프리미티브를 제공합니다:

  • Goroutine: 경량 스레드, 초기 스택은 단 2KB 이며 동적으로 성장 가능
  • Channel: Goroutine 간 통신용
go
// goroutine 시작
go func() {
    fmt.Println("Hello from goroutine")
}()

// channel 을 사용한 통신
ch := make(chan int)
go func() {
    ch <- 42
}()
value := <-ch

4. 메모리 안전

  • 자동 가비지 컬렉션 (GC)
  • 강타입 시스템
  • 메모리 안전 보장, 포인터 연산 없음

5. 풍부한 표준 라이브러리

Go 언어는 풍부한 표준 라이브러리를 제공하며, 다음과 같은 분야를 다룹니다:

  • 네트워크 (HTTP, RPC, WebSocket)
  • 암호화 (AES, RSA, SHA)
  • 파일 처리
  • JSON/XML 파싱
  • 테스트 프레임워크
  • 등등

6. 교차 컴파일

Go 는 교차 컴파일을 지원하며, 한 플랫폼에서 다른 플랫폼의 실행 파일을 컴파일할 수 있습니다:

bash
# Linux 에서 Windows 실행 파일 컴파일
GOOS=windows GOARCH=amd64 go build -o app.exe

응용 분야

Go 언어는 다음과 같은 분야에서 널리 사용되고 있습니다:

클라우드 네이티브 및 인프라

  • Docker: 컨테이너 기술
  • Kubernetes: 컨테이너 오케스트레이션 플랫폼
  • Prometheus: 모니터링 시스템
  • etcd: 분산 키 - 값 저장소

네트워크 서비스

  • 마이크로서비스 아키텍처
  • API 게이트웨이
  • 로드 밸런서
  • RPC 프레임워크

블록체인

  • Ethereum: 이더리움 클라이언트 Geth
  • Hyperledger Fabric
  • 다양한 퍼블릭 체인 프로젝트

명령줄 도구

  • Terraform: 인프라스트럭처 애즈 코드
  • Consul: 서비스 디스커버리
  • Vault: 키 관리
  • Helm: Kubernetes 패키지 관리자

데이터베이스

  • TiDB: 분산 데이터베이스
  • CockroachDB: 분산 SQL 데이터베이스
  • InfluxDB: 시계열 데이터베이스

다른 언어와 비교

특성GoJavaPythonC++
컴파일 속도빠름보통컴파일 불필요느림
실행 성능높음보통낮음높음
并发 지원네이티브스레드 라이브러리스레드 라이브러리/async스레드 라이브러리
학습 곡선완만보통완만가파름
메모리 관리GCGCGC수동
배포 방식단일 파일JVM인터프리터단일 파일

설계 철학

Go 언어의 설계 철학은 다음과 같이 요약할 수 있습니다:

적은 것이 많다 (Less is More)

구체적으로 다음과 같이 나타납니다:

  1. 한 가지 방법으로 일 처리: 동일한 기능을 구현하는 여러 방법을 제공하지 않음
  2. 명시적优于암시적: 코드 동작이 명확하게 보임
  3. 조합优于상속: 상속이 아닌 인터페이스와 조합 사용
  4. 단순함优于복잡함: 언어와 라이브러리의 단순함 유지

Go 언어 마스코트

Go 언어의 마스코트는 Renee French 가 디자인한 파란색 들쥐 (Gopher) 입니다. 이 귀여운 Gopher 는 Go 커뮤니티의 상징적 기호가 되었습니다.

다음 단계

Golang by www.golangdev.cn edit