~/VibeHandbook
$39

언어

go.dev

Go

무엇인가

Go(Golang)는 단순성, 빠른 빌드, 동시성을 목표로 설계된 Google의 정적 타입 컴파일 언어입니다. 단일 정적 바이너리를 생성하고, 작고 신중하게 선별된 기능 세트를 가지며, 신뢰할 수 있는 네트워크 서비스와 명령줄 도구를 작성하기 위해 만들어졌습니다.

강점

  • 의존성 없는 단일 바이너리로 컴파일됩니다 — 배포가 매우 간단합니다.
  • goroutine과 channel을 통한 내장 동시성.
  • 가비지 컬렉션과 함께 빠른 컴파일과 빠른 런타임.
  • 강력한 표준 라이브러리(HTTP, JSON, crypto)와 강제되는 포매팅(gofmt).

트레이드오프

  • 의도적으로 미니멀합니다: 장황한 에러 처리(if err != nil)와 제한된 표현력.
  • 제네릭이 늦게 도입되었고, 다른 언어들에 비해 여전히 소박한 수준입니다.
  • 무거운 데이터 과학이나 UI 작업에는 덜 적합합니다.
  • 가독성을 돕는 단순함이 대규모 코드베이스에서는 반복적으로 느껴질 수 있습니다.

언제 선택하는가

빠르고 자체 완결적인 백엔드 서비스, CLI 도구, 또는 네트워크 인프라(프록시, API, 데몬)가 필요할 때 Go를 선택하세요. 배포 단순성, 예측 가능한 성능, 동시성이 중요한 곳에서 빛을 발합니다 — 그래서 수많은 클라우드 네이티브 도구(Docker, Kubernetes)가 Go로 작성된 것입니다.

바이브 코딩 적합성

AI 어시스턴트는 Go를 잘 다루는데, 바로 언어가 작고 관용구가 강력하기 때문입니다 — 보통 일을 처리하는 명백한 방법이 하나뿐이라, 생성된 코드가 관례적이고 gofmt에 맞는 경향이 있습니다. AI에게 에러를 무시하지 말고 명시적으로 처리하고, 의존성에 손대기 전에 표준 라이브러리를 사용하며, 동시성에는 적절한 context 취소와 함께 goroutine을 활용하라고 지시하세요. 즉시 go run으로 각 부분을 검증할 수 있도록 go.mod 모듈 경로와 실행 가능한 main을 포함하라고 요청하세요.

package main

import (
	"fmt"
	"strings"
)

func main() {
	words := strings.Fields("go is fast and simple")
	counts := map[string]int{}
	for _, w := range words {
		counts[w]++
	}
	fmt.Println(counts)
}