3.1 불
불(Boolean) 타입은 true나 false 값을 가진다. 불 타입의 값으로 true나 false를 직접 사용할 수도 있고, 논리 연산자나 비교 연산자의 결괏값을 사용할 수도 있다.
b1 := true b2 := v == 5 // false b3 := v == 10 // true b4 := b1 && b2 // false b5 := b1 || b2 // true b6 := !b1 // false
조건부 논리 연산자(||, &&)는 단락(short circuit) 방식으로 동작한다. 즉, 앞의 조건만으로 결과를 얻을 수 있다면 뒤의 조건은 무시한다. 표현식 b1 || b2에서 b1이 true라면 b2 값에 관계없이 결과는 항상 true이므로 b2를 검사하지 않고 바로 true를 반환한다. 이와 비슷하게 b1 && b2에서 b1이 false라면 b2 값에 관계없이 결과는 항상 false이므로 b2를 검사하지 않고 바로 false를 반환한다.
Go에서는 다른 타입 값을 불 타입으로 바꾸는 암묵적인 변환을 하지 않는다. 즉, 0이나 nil을 false로 변환하지 않는다.
다음 코드는 빌드 오류가 발생한다.
func checkValue(v interface{}) { // 빌드 오류 발생(non-bool v used as if condition) if v { fmt.Printf(“value is %v\n”, v) return } fmt.Println(“value is nil”) }
if 문의 조건식에는 반드시 불 타입 값을 사용해야 한다.
func checkValue(v interface{}) { if v != nil { fmt.Printf(“value is %v\n”, v) return } fmt.Println(“value is nil”) }