Go · · 2 min read

Go 언어의 특성

단순성(Simplicity)

  • 최소한의 키워드와 문법 구조
  • 복잡한 기능보다는 명확하고 읽기 쉬운 코드 지향
  • “Less is more” 철학

명시성(Explicitness)

  • 암묵적 변환이나 숨겨진 동작 최소화
  • 에러 처리를 명시적으로 강제
  • 인터페이스 구현을 명시적으로 선언하지 않음 (덕 타이핑)

성능 특성

컴파일 언어

  • 빠른 컴파일 속도와 실행 속도
  • 정적 타입 검사로 런타임 에러 감소
  • 단일 실행 파일 생성 (배포 용이)

가비지 컴렉션

  • 자동 메모리 관리
  • 저지연(low-latency) GC 설계
  • 메모리 안전성 보장

동시성(Concurrency)

고루틴(Goroutines)

  • 경량 스레드 (수천 개도 가능)
  • OS 스레드보다 적은 메모리 사용
  • 간단한 go 키워드로 실행

채널(Channels)

  • 고루틴 간 안전한 통신
  • “메모리를 공유하여 통신하지 말고, 통신하여 메모리를 공유하라”
  • 데드락 방지 메커니즘

개발 편의성

풍부한 표준 라이브러리

  • HTTP 서버/클라이언트, JSON 처리, 암호화 등
  • 외부 의존성 없이도 많은 작업 가능

빠른 개발 사이클

  • 빠른 컴파일로 개발-테스트 사이클 단축
  • go run으로 즉시 실행 가능
  • 내장된 테스팅 프레임워크

타입 시스템

정적 타입 + 타입 추론

  • 컴파일 타임 타입 검사
  • := 연산자로 타입 자동 추론
  • 제네릭 지원 (Go 1.18+)

인터페이스

  • 덕 타이핑으로 유연한 다형성
  • 작은 인터페이스 권장
  • 암묵적 구현

도구와 생태계

내장 도구들

  • go fmt: 코드 포맷팅 자동화
  • go vet: 코드 분석
  • go mod: 의존성 관리
  • go test: 테스트 실행

크로스 컴파일

  • 다양한 OS/아키텍처 지원
  • 간단한 환경변수 설정으로 빌드

적합한 용도

서버 개발

  • 웹 서버, API 서버
  • 마이크로서비스 아키텍처
  • 클라우드 네이티브 애플리케이션

시스템 프로그래밍

  • CLI 도구
  • 네트워크 프로그래밍
  • 분산 시스템

DevOps 도구

  • Docker, Kubernetes 등이 Go로 작성됨
  • 인프라 관리 도구

다음 글: 채널(chan): 버퍼, 블로킹, select, 주의점