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로 작성됨
- 인프라 관리 도구