golang/go 저장소의 README는 지금도 'The Go programming language' 한 문장이 전부다. 트렌디한 신생 언어들이 마케팅 카피와 벤치마크 차트로 첫 화면을 채우는 시대에, 14년차 언어가 이렇게 무뚝뚝한 첫 인상을 고집하는 건 그 자체가 메시지다. 화려한 수사로 설명할 필요가 없는 자리, 즉 인프라 레이어의 공용어가 되었다는 자신감이 그 침묵 안에 들어 있다.
Go의 핵심 설계 결정 몇 가지는 지금 봐도 도발적이다. 제네릭을 12년이나 미루다가 1.18에서야 type parameter 형태로 도입했고, 그 사이 표준 라이브러리는 interface{}로 버텼다. enum도, 삼항 연산자도, 매크로도 끝내 거절했다. 대신 goroutine과 channel을 언어 차원으로 끌어올렸고, context.Context를 모든 외부 호출 함수의 첫 인자로 만드는 관습을 표준화했다. 가비지 컬렉터는 tri-color concurrent mark-sweep으로 sub-millisecond pause를 유지하면서도 generational로 가지 않는다. 더 빠른 길이 보여도 단순성을 깨지 않는다는 원칙이 코드 곳곳에 박혀 있다.
반대급부도 분명하다. 에러 핸들링은 errors.Join과 %w wrapping이 도입됐어도 결국 if err != nil의 반복으로 끝난다. enum이 없어 iota와 String() 메서드로 우회하고, 표준 라이브러리에는 제네릭 도입 이전의 API가 화석처럼 남아 있다. 의존성 관리는 GOPROXY와 go.sum으로 정리됐지만, 사내 네트워크가 끊기면 빌드가 멈추는 새로운 종류의 의존성이 생겼다. 표현력의 천장은 분명히 낮다.
그럼에도 24 stars/day가 꾸준한 이유는 Go 1 compatibility promise에 있다. 2012년에 쓴 net/http 핸들러가 2026년에도 그대로 컴파일된다는 보장, go build 한 번이면 정적 링크된 단일 바이너리가 떨어진다는 보장. Docker, Kubernetes, etcd, Prometheus, Terraform, CockroachDB가 모두 Go인 건 우연이 아니라 이 두 보장의 직접적 결과다. 새 언어들이 표현력으로 경쟁할 때 Go는 '시간이 지나도 안 깨진다'를 경쟁축으로 가져갔고, 그 베팅이 인프라 레이어 전체에서 회수되고 있다. README가 한 줄짜리인 건 게으름이 아니라 결론이다.