더북(TheBook)

3.1

(Boolean) 타입은 truefalse 값을 가진다. 불 타입의 값으로 truefalse를 직접 사용할 수도 있고, 논리 연산자나 비교 연산자의 결괏값을 사용할 수도 있다.

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에서 b1true라면 b2 값에 관계없이 결과는 항상 true이므로 b2를 검사하지 않고 바로 true를 반환한다. 이와 비슷하게 b1 && b2에서 b1false라면 b2 값에 관계없이 결과는 항상 false이므로 b2를 검사하지 않고 바로 false를 반환한다.

Go에서는 다른 타입 값을 불 타입으로 바꾸는 암묵적인 변환을 하지 않는다. 즉, 0이나 nilfalse로 변환하지 않는다.

다음 코드는 빌드 오류가 발생한다.

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”)
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.