mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 00:11:36 +08:00
Reformat
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#4.5 基本类型和运算符
|
||||
# 4.5 基本类型和运算符
|
||||
|
||||
我们将在这个部分讲解有关布尔型、数字型和字符型的相关知识。
|
||||
|
||||
表达式是一种特定的类型的值,它可以由其它的值以及运算符组合而成。每个类型都定义了可以和自己结合的运算符集合,如果你使用了不在这个集合中的运算符,则会在编译时获得编译错误。
|
||||
@@ -9,7 +10,8 @@
|
||||
|
||||
你可以在第 4.5.3 节找到有关运算符优先级的相关信息,优先级越高的运算符在条件相同的情况下将被优先执行。但是你可以通过使用括号将其中的表达式括起来,以人为地提升某个表达式的运算优先级。
|
||||
|
||||
##4.5.1 布尔类型 bool
|
||||
## 4.5.1 布尔类型 bool
|
||||
|
||||
一个简单的例子:`var b bool = true`。
|
||||
|
||||
布尔型的值只可以是常量 true 或者 false。
|
||||
@@ -75,8 +77,10 @@ Go 语言中包含以下逻辑运算符:
|
||||
|
||||
对于布尔值的好的命名能够很好地提升代码的可读性,例如以 `is` 或者 `Is` 开头的 `isSorted`、`isFinished`、`isVisivle`,使用这样的命名能够在阅读代码的获得阅读正常语句一样的良好体验,例如标准库中的 `unicode.IsDigit(ch)`(第 4.5.5 节)。
|
||||
|
||||
##4.5.2 数字类型
|
||||
###4.5.2.1 整型 int 和浮点型 float
|
||||
## 4.5.2 数字类型
|
||||
|
||||
### 4.5.2.1 整型 int 和浮点型 float
|
||||
|
||||
Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码(二的补码,详情参见:[http://en.wikipedia.org/wiki/Two's_complement](http://en.wikipedia.org/wiki/Two's_complement))。
|
||||
|
||||
Go 也有基于架构的类型,例如:int、uint 和 uintptr。
|
||||
@@ -196,7 +200,8 @@ Example 4.9 [casting.go](examples/chapter_4/casting.go)
|
||||
|
||||
**问题 4.1** int 和 int64 是相同的类型吗?
|
||||
|
||||
###4.5.2.2 复数
|
||||
### 4.5.2.2 复数
|
||||
|
||||
Go 拥有以下复数类型:
|
||||
|
||||
complex64 (32 位实数和虚数)
|
||||
@@ -220,7 +225,8 @@ Go 拥有以下复数类型:
|
||||
|
||||
复数支持和其它数字类型一样的运算。当你使用等号 `==` 或者不等号 `!=` 对复数进行比较运算时,注意对精确度的把握。`cmath` 包中包含了一些操作复数的公共方法。如果你对内存的要求不是特别高,最好使用 complex128 作为计算类型,因为相关函数都使用这个类型的参数。
|
||||
|
||||
###4.5.2.3 位运算
|
||||
### 4.5.2.3 位运算
|
||||
|
||||
位运算只能用于整数类型的变量,且需当它们拥有等长位模式时。
|
||||
|
||||
`%b` 是用于表示位的格式化标识符。
|
||||
@@ -308,14 +314,16 @@ Go 拥有以下复数类型:
|
||||
|
||||
flag := Active | Send // == 3
|
||||
|
||||
###4.5.2.4 逻辑运算符
|
||||
### 4.5.2.4 逻辑运算符
|
||||
|
||||
Go 中拥有以下逻辑运算符:`==`、`!=`(第 4.5.1 节)、`<`、`<=`、`>`、`>=`。
|
||||
|
||||
它们之所以被称为逻辑运算符是因为它们的运算结果总是为布尔值 `bool`。例如:
|
||||
|
||||
b3:= 10 > 5 // b3 is true
|
||||
|
||||
###4.5.2.5 算术运算符
|
||||
### 4.5.2.5 算术运算符
|
||||
|
||||
常见可用于整数和浮点数的二元运算符有 `+`、`-`、`*` 和 `/`。
|
||||
|
||||
(相对于一般规则而言,Go 在进行字符串拼接时允许使用对运算符 `+` 的重载,但 Go 本身不允许开发者进行自定义的运算符重载)
|
||||
@@ -341,7 +349,8 @@ Go 中拥有以下逻辑运算符:`==`、`!=`(第 4.5.1 节)、`<`、`<=`
|
||||
|
||||
在运算时 **溢出** 不会产生错误,Go 会简单地将超出位数抛弃。如果你需要范围无限大的整数或者有理数(意味着只被限制于计算机内存),你可以使用标准库中的 `big` 包,该包提供了类似 `big.Int` 和 `big.Rat` 这样的类型(第 9.4 节)。
|
||||
|
||||
###4.5.2.6 随机数
|
||||
### 4.5.2.6 随机数
|
||||
|
||||
一些像游戏或者统计学类的应用需要用到随机数。`rand` 包实现了伪随机数的生成。
|
||||
|
||||
Example 4.10 [random.go](examples/chapter_4/random.go) 演示了如何生成 10 个非负随机数:
|
||||
@@ -380,7 +389,8 @@ Example 4.10 [random.go](examples/chapter_4/random.go) 演示了如何生成 10
|
||||
|
||||
你可以使用 `Seed(value)` 函数来提供伪随机数的生成种子,一般情况下都会使用当前时间的纳秒级数字(第 4.8 节)。
|
||||
|
||||
##4.5.3 运算符与优先级
|
||||
## 4.5.3 运算符与优先级
|
||||
|
||||
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
|
||||
|
||||
优先级 运算符
|
||||
@@ -394,7 +404,8 @@ Example 4.10 [random.go](examples/chapter_4/random.go) 演示了如何生成 10
|
||||
|
||||
当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。
|
||||
|
||||
##4.5.4 类型别名
|
||||
## 4.5.4 类型别名
|
||||
|
||||
当你在使用某个类型时,你可以给它起另一个名字,然后你就可以在你的代码中使用新的名字(用于简化名称或解决名称冲突)。
|
||||
|
||||
在 `type TZ int` 中,TZ 就是 int 类型的新名称(用于表示程序中的时区),然后就可以使用 TZ 来操作 int 类型的数据。
|
||||
@@ -416,7 +427,8 @@ Example 4.11 [type.go](examples/chapter_4/type.go)
|
||||
|
||||
**练习 4.5** 定义一个 `string` 的类型别名 `Rope`,并声明一个该类型的变量。
|
||||
|
||||
##4.5.5 字符类型
|
||||
## 4.5.5 字符类型
|
||||
|
||||
严格来说,这并不是 Go 语言的一个类型,字符只是整数的特殊用例。`byte` 类型是 `uint8` 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题。例如:`var ch byte = 'A'`;字符使用单引号括起来。
|
||||
|
||||
在 ASCII 码表中,A 的值是 65,而使用 16 进制表示则为 41,所以下面的写法是等效的:
|
||||
@@ -460,9 +472,10 @@ Example 4.12 [char.go](examples/chapter_4/char.go)
|
||||
|
||||
这些函数返回一个布尔值。包 `utf8` 拥有更多与 rune 相关的函数。
|
||||
|
||||
( ***译者注:关于类型的相关讲解,可参考视频教程 《Go编程基础》 第 3 课:[类型与变量](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture3/lecture3.md)*** )
|
||||
( **译者注:关于类型的相关讲解,可参考视频教程 《Go编程基础》 第 3 课:[类型与变量](https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture3.md)** )
|
||||
|
||||
## 链接
|
||||
|
||||
##链接
|
||||
- [目录](directory.md)
|
||||
- 上一节:[变量](04.4.md)
|
||||
- 下一节:[字符串](04.6.md)
|
||||
|
Reference in New Issue
Block a user