基本类型和运算符
表达式是一种特定的类型的值,它可以由其它的值以及运算符组合而成。每个类型都定义了可以和自己结合的运算符 集合,如果你使用了不在这个集合中的运算符,则会在编译时获得编译错误。
一元运算符只可以用于一个值的操作(作为后缀),而二元运算符则可以和两个值或者操作数结合(作为中缀)。
只有两个类型相同的值才可以和二元运算符结合,另外要注意的是,Go 是强类型语言,因此不会进行隐式转换,任何 不同类型之间的转换都必须显式说明。Go 不存在像 C 和 Java 那样的运算符重载,表达式的解析 顺序是从左至右。
布尔类型 bool
一个简单的例子: var b bool = true 。
布尔型的值只可以是常量 true 或者 false。
两个类型相同的值可以使用相等 == 或者不等 != 运算符来进行比较并获得一个布尔型的值。 当相等运算符两边的值是完全相同的值的时候会返回 true,否则返回 false,并且只有在两个的值的类型相同的情 况下才可以使用。
示例:
var aVar = 10
aVar == 5 -> false
aVar == 10 -> true
当不等运算符两边的值是不同的时候会返回 true,否则返回 false。
示例:
var aVar = 10
aVar != 5 -> true
aVar != 10 -> false
Go 对于值之间的比较有非常严格的限制,只有两个类型相同的值才可以进行比较,如果值的类型是接口,它们也必须都实现了相同的接口。如果其中一个值是常量,那么另外一个值的类型必须和该常量类型相兼容的。如果以上条件都不满足,则其中一个值的类型必须在被转换为和另外一个值的类型相同之后才可以进行比较。
布尔型的常量和变量也可以通过和逻辑运算符(非 ! 、和 && 、或 || )结合来产生另外一个布尔值,这样 的逻辑语句就其本身而言,并不是一个完整的 Go 语句。
逻辑值可以被用于条件结构中的条件语句,以便测试某个条件是否满足。另外,和 && 、或 || 与 相等 == 或不等 != 属于二元运算符,而非 ! 属于一元运算符。在接下来的内容中,我们会使用 T 来代 表条件符合的语句,用 F 来代表条件不符合的语句。
Go 语言中包含以下逻辑运算符:
非运算符: !
!T -> false
!F -> true
非运算符用于取得和布尔值相反的结果。
和运算符: &&
T && T -> true
T && F -> false
F && T -> false
F && F -> fals
只有当两边的值都为 true 的时候,和运算符的结果才是 true。
或运算符: ||
T || T -> true
T || F -> true
F || T -> true
F || F -> false
只有当两边的值都为 false 的时候,或运算符的结果才是 false,其中任意一边的值为 true 就能够使得该表达 式的结果为 true。
在 Go 语言中,&& 和 || 是具有快捷性质的运算符,当运算符左边表达式的值已经能够决定整个表达式的值的时候 (&& 左边的值为 false,|| 左边的值为 true),运算符右边的表达式将不会被执行。
利用这个性质,如果你有 多个条件判断,应当将计算过程较为复杂的表达式放在运算符的右侧以减少不必要的运算。 利用括号同样可以升级某个表达式的运算优先级。
在格式化输出时,你可以使用 %t 来表示你要输出的值为布尔型。
布尔值(以及任何结果为布尔值的表达式)最常用在条件结构的条件语句中,例如:if、for 和 switch 结构。 对于布尔值的好的命名能够很好地提升代码的可读性,例如以 is 或者 Is 开头的isSorted、 isFinished 、 isVisible ,使用这样的命名能够在阅读代码的获得阅读正常语句一样的良好体验,例如标准库中的 unicode.IsDigit(ch)。