개요
Go (Golang)는 Google에서 개발한 간결하고 효율적인 프로그래밍 언어입니다. 복잡한 C++ 프로젝트의 빌드 시간과 코드 복잡성을 해결하기 위해 설계되었으며, goroutine 기반의 강력한 동시성 모델과 빠른 컴파일이 특징입니다.
- 출시: 2009년 (오픈소스), 2012년 (1.0)
- 설계자: Rob Pike, Ken Thompson, Robert Griesemer (Google)
- 패러다임: 정적 타입, 컴파일 언어, 동시성 지향
- 라이선스: BSD
- 웹사이트: https://go.dev
- 패키지: https://pkg.go.dev (40만+ 모듈)
핵심 특징
간결함 (Simplicity)
| 특징 | 설명 |
|---|---|
| 25개 키워드 | 언어 문법이 매우 작고 배우기 쉬움 |
| 단일 바이너리 | 외부 의존성 없이 실행 가능한 바이너리 컴파일 |
| gofmt | 코드 스타일 통일 (포맷터가 표준) |
| 크로스 컴파일 | GOOS=linux GOARCH=amd64 go build로 간단히 교차 빌드 |
| 빠른 컴파일 | 대규모 프로젝트도 수 초 내 빌드 |
Goroutine (동시성)
Go의 가장 강력한 기능. 경량 스레드로 수만~수십만 개를 동시에 실행 가능:
func main() {
ch := make(chan string)
go func() {
ch <- "Hello from goroutine"
}()
msg := <-ch
fmt.Println(msg)
}| 항목 | OS 스레드 | Goroutine |
|---|---|---|
| 메모리 | ~1MB | ~2KB |
| 생성 비용 | 높음 | 매우 낮음 |
| 동시 개수 | 수천 | 수십만 |
| 통신 | 뮤텍스/락 | Channel |
핵심 도구
| 도구 | 설명 |
|---|---|
| go build | 컴파일 |
| go test | 테스트 (내장) |
| go fmt | 코드 포맷 (표준) |
| go mod | 모듈/의존성 관리 |
| go vet | 정적 분석 |
| go generate | 코드 생성 |
go mod init myproject
go build ./...
go test ./...
go run main.goGo로 작성된 주요 프로젝트
| 프로젝트 | 설명 |
|---|---|
| Docker | 컨테이너 런타임 |
| Kubernetes | 컨테이너 오케스트레이션 |
| Terraform | Infrastructure as Code |
| Prometheus | 모니터링 시스템 |
| etcd | 분산 키-밸류 스토어 |
| Hugo | 정적 사이트 생성기 |
| CockroachDB | 분산 SQL DB |
클라우드 네이티브 인프라의 사실상 표준 언어
장단점
장점:
- 배우기 쉽고 코드가 일관적 (gofmt 강제)
- goroutine으로 높은 동시성 처리
- 단일 바이너리 배포 (의존성 없음)
- 빠른 컴파일, GC 성능 지속 개선
- 클라우드/DevOps 생태계 지배적
단점:
- 제네릭 도입이 늦음 (Go 1.18, 2022년)
- 에러 처리 반복적 (
if err != nil) - OOP 부재 (상속 없음, 인터페이스로 대체)
- GUI/모바일 앱 지원 약함
관련 항목
- 프로그래밍 언어 비교
- Rust — 시스템 언어 대안
- Docker — Go로 작성
- Kubernetes — Go로 작성
- Terraform — Go로 작성
- DevOps