mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:06:41 +08:00
04.5.1.md
This commit is contained in:
@@ -1,9 +1,86 @@
|
|||||||
|
#4.5 基本类型和运算符
|
||||||
|
我们将在这个部分讲解有关布尔型、数字型和字符型的相关知识。
|
||||||
|
|
||||||
|
表达式是一种特定的类型的值,它可以由其它的值以及运算符组合而成。每个类型都定义了可以和自己结合的运算符集合,如果你使用了不在这个集合中的运算符,则会在编译时获得编译错误。
|
||||||
|
|
||||||
|
一元运算符只可以用于一个值的操作(作为后缀),而二元运算符则可以和两个值或者操作数结合(作为中缀)。
|
||||||
|
|
||||||
|
只有两个类型相同的值才可以和二元运算符结合,另外要注意的是,Go 是强类型语言,因此不会进行隐式转换,任何不同类型之间的转换都必须显式说明(第 4.2 节)。Go 不存在像 C 和 Java 那样的运算符重载,表达式的解析顺序是从左至右。
|
||||||
|
|
||||||
|
你可以在第 4.5.3 节找到有关运算符优先级的相关信息,优先级越高的运算符在条件相同的情况下将被优先执行。但是你可以通过使用括号将其中的表达式括起来,以人为地提升某个表达式的运算优先级。
|
||||||
|
|
||||||
|
##4.5.1 布尔类型 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 对于值之间的比较有非常严格的限制,只有两个类型相同的值才可以进行比较,如果值的类型是接口(interface,第 11 章),它们也必须都实现了相同的接口。如果其中一个值是常量,那么另外一个值的类型必须和该常量类型相兼容的。如果以上条件都不满足,则其中一个值的类型必须在被转换为和另外一个值的类型相同之后才可以进行比较。
|
||||||
|
|
||||||
|
布尔型的常量和变量也可以通过和逻辑运算符(非 `!`、和 `&&`、或 `||`)结合来产生另外一个布尔值,这样的逻辑语句就其本身而言,并不是一个完整的 Go 语句。
|
||||||
|
|
||||||
|
逻辑值可以被用于条件结构中的条件语句(第 5 章),以便测试某个条件是否满足。另外,和 `&&`、或 `||` 与相等 `==` 或不等 `!=` 属于二元运算符,而非 `!` 属于一元运算符。在接下来的内容中,我们会使用 T 来代表条件符合的语句,用 F 来代表条件不符合的语句。
|
||||||
|
|
||||||
|
Go 语言中包含以下逻辑运算符:
|
||||||
|
|
||||||
|
非运算符:`!`
|
||||||
|
|
||||||
|
!T -> false
|
||||||
|
!F -> true
|
||||||
|
|
||||||
|
非运算符用于取得和布尔值相反的结果。
|
||||||
|
|
||||||
|
和运算符:`&&`
|
||||||
|
|
||||||
|
T && T -> true
|
||||||
|
T && F -> false
|
||||||
|
F && T -> false
|
||||||
|
F && F -> false
|
||||||
|
|
||||||
|
只有当两边的值都为 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 结构(第 5 章)。
|
||||||
|
|
||||||
|
对于布尔值的好的命名能够很好地提升代码的可读性,例如以 `is` 或者 `Is` 开头的 `isSorted`、`isFinished`、`isVisivle`,使用这样的命名能够在阅读代码的获得阅读正常语句一样的良好体验,例如标准库中的 `unicode.IsDigit(ch)`(第 4.5.5 节)。
|
||||||
|
|
||||||
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
||||||
要不等到 ***2013 年 5 月 9 日*** 再来看看吧~~
|
要不等到 ***2013 年 5 月 13 日*** 再来看看吧~~
|
||||||
|
|
||||||
这里还有一些其它的学习资源噢~
|
这里还有一些其它的学习资源噢~
|
||||||
|
|
||||||
- [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第9课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture9/lecture9.md)
|
- [《Go编程基础》](https://github.com/Unknwon/go-fundamental-programming):已更新至 [第10课](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture10/lecture10.md)
|
||||||
- [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang)
|
- [《Go Web编程》](https://github.com/astaxie/build-web-application-with-golang)
|
||||||
|
|
||||||
神马?你说你不想学习?那好吧,去逛逛看看行情也行~
|
神马?你说你不想学习?那好吧,去逛逛看看行情也行~
|
||||||
@@ -13,8 +90,8 @@
|
|||||||
- [Go语言学习园地](http://studygolang.com/)
|
- [Go语言学习园地](http://studygolang.com/)
|
||||||
- [Golang中国](http://golang.tc)
|
- [Golang中国](http://golang.tc)
|
||||||
|
|
||||||
#4.5 基本类型和运算符
|
##4.5.2 数字类型
|
||||||
|
###4.5.2.1 整型 int 和浮点型 float
|
||||||
|
|
||||||
##链接
|
##链接
|
||||||
- [目录](directory.md)
|
- [目录](directory.md)
|
||||||
|
Reference in New Issue
Block a user