숏컷 코드
var name string
count := 3
const maxRetries = 5Go 변수 선언은 명시 선언, 짧은 선언, 상수, zero value를 나눠서 읽으면 헷갈림이 줄어듭니다.
문법
타입을 명시하는 var
var name string
var count int = 3var는 타입을 명시하거나, 초기값에서 타입을 추론하게 만들 수 있습니다. 초기값이 없으면 타입의 zero value가 들어갑니다.
var enabled bool // false
var total int // 0
var title string // ""함수 안의 짧은 선언 :=
count := 3
name := "refdock":=는 함수 안에서만 쓸 수 있습니다. 타입은 오른쪽 값에서 추론됩니다.
func run() {
ready := true
_ = ready
}패키지 최상위에서는 :=를 쓸 수 없습니다.
상수는 const
const timeoutSeconds = 5
const serviceName = "api"const는 컴파일 타임 상수입니다. 문자열, 숫자, bool 같은 상수 값에 사용합니다.
기본값
Go는 선언만 해도 기본값이 있다
var users []User
var cache map[string]User
var done chan struct{}slice, map, channel, pointer, interface의 zero value는 nil입니다. 다만 nil slice는 append가 가능하지만, nil map은 직접 쓰기 전에 make가 필요합니다.
var users []string
users = append(users, "a")
var counts map[string]int
// counts["a"] = 1 // panic선택 기준
| 상황 | 먼저 떠올릴 선택 |
|---|---|
| 함수 안에서 짧게 선언 | := |
| 타입을 명확히 보이고 싶음 | var name Type |
| zero value를 의도적으로 사용 | 초기값 없는 var |
| 바뀌지 않는 값 | const |
| 패키지 최상위 선언 | var 또는 const |
주의할 점
:=는 새 변수가 하나 이상 있을 때만 동작합니다. 기존 변수에 다시 값을 넣을 때는 =를 써야 합니다. 또한 zero value가 안전한 타입과 그렇지 않은 타입이 다르므로, map과 channel처럼 make가 필요한 값은 선언 직후 사용 가능 여부를 확인해야 합니다.
참고 링크
3 sources