IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Go语言核心技术(卷一)之2.4-布尔值

    abv123456789发表于 2016-03-16 18:32:01
    love 0

    布尔值有两种:true和false。if和for语句中的条件都是布尔值,比较运算符== 、<等也会产生一个布尔值。一元运算符! 是逻辑取反操作,所以!true就是false。Go语言提倡简洁的风格,因此我们会将x == true这种表达式直接写成x:if x {..} 。

    布尔值可以结合&&(AND) 、|| (OR)一起使用,这两个操作符都有短路特性,如果操作符的左边表达式就能决定结果了,那操作符右边的表达式不会求值:

    s != "" && s[0] == 'x'
    如果s是空字符串,那s[0]会panic,但是因为s为""的时候,&&左边的表达式是false,因此根据短路规则,&&右边的表达式不会求值,也就不会panic。

    因为&&比||的优先级更高,所以下面的条件表达式不需要括号:

    if 'a' <= c && c <= 'z' ||
        'A' <= c && c <= 'Z' ||
        '0' <= c && c <= '9' {
        // ...ASCII letter or digit...
    }
    在布尔值和数值之间并没有隐式的类型转换(再次强调,Go是强类型静态语言),反之亦然。需要显式的使用if:
    i := 0
    if b {
        i = 1
    }
    如果这个操作经常发生,那么可以使用一个转换函数:
    func btoi(b bool) int {
        if b {
            return 1
        }
        return 0
    }
    反向操作也很简单,甚至不需要使用函数,不过为了和上面的代码保持对称性:
    func itob(i int) bool { return i != 0 }







沪ICP备19023445号-2号
友情链接