mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 23:08:34 +08:00
04.5.md
This commit is contained in:
124
eBook/04.5.md
124
eBook/04.5.md
@@ -213,7 +213,7 @@ Go 拥有以下复数类型:
|
||||
|
||||
函数 `real(c)` 和 `imag(c)` 可以分别获得相应的实数和虚数部分。
|
||||
|
||||
在使用格式化标识符时,可以使用 `%v` 来表示复数,但当你希望只表示其中的一个部分的时候需要使用 `%f`。
|
||||
在使用格式化说明符时,可以使用 `%v` 来表示复数,但当你希望只表示其中的一个部分的时候需要使用 `%f`。
|
||||
|
||||
复数支持和其它数字类型一样的运算。当你使用等号 `==` 或者不等号 `!=` 对复数进行比较运算时,注意对精确度的把握。`cmath` 包中包含了一些操作复数的公共方法。如果你对内存的要求不是特别高,最好使用 complex128 作为计算类型,因为相关函数都使用这个类型的参数。
|
||||
|
||||
@@ -341,21 +341,123 @@ Go 中拥有以下逻辑运算符:`==`、`!=`(第 4.5.1 节)、`<`、`<=`
|
||||
###4.5.2.6 随机数
|
||||
一些像游戏或者统计学类的应用需要用到随机数。`rand` 包实现了伪随机数的生成。
|
||||
|
||||
Example 4.10 [random.go](examples/chapter_4/random.go) 演示了如何生成 10 个非负随机数:
|
||||
|
||||
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
||||
要不等到 ***2013 年 6 月 11 日*** 再来看看吧~~
|
||||
package main
|
||||
import (
|
||||
“fmt”
|
||||
“rand”
|
||||
“time”
|
||||
)
|
||||
|
||||
这里还有一些其它的学习资源噢~
|
||||
func main() {
|
||||
for i := 0; i < 10; i++ {
|
||||
a := rand.Int()
|
||||
fmt.Printf(“%d / “, a)
|
||||
}
|
||||
for i := 0; i < 5; i++ {
|
||||
r := rand.Intn(8)
|
||||
fmt.Printf(“%d / “, r)
|
||||
}
|
||||
fmt.Println()
|
||||
timens := int64(time.Now().Nanosecond())
|
||||
rand.Seed(timens)
|
||||
for i := 0; i < 10; i++ {
|
||||
fmt.Printf(“%2.2f / “, 100*rand.Float32())
|
||||
}
|
||||
}
|
||||
|
||||
- [《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)
|
||||
可能的输出:
|
||||
|
||||
神马?你说你不想学习?那好吧,去逛逛看看行情也行~
|
||||
816681689 / 1325201247 / 623951027 / 478285186 / 1654146165 /
|
||||
1951252986 / 2029250107 / 762911244 / 1372544545 / 591415086 / / 3 / 0 / 6 / 4 / 2 /22.10
|
||||
/ 65.77 / 65.89 / 16.85 / 75.56 / 46.90 / 55.24 / 55.95 / 25.58 / 70.61 /
|
||||
|
||||
- [Go Walker](http://gowalker.org) **Go 项目文档在线浏览工具**
|
||||
- [Golang中文社区](http://bbs.mygolang.com/forum.php)
|
||||
- [Go语言学习园地](http://studygolang.com/)
|
||||
- [Golang中国](http://golang.tc)
|
||||
函数 `rand.Float32` 和 `rand.Float64` 返回介于 [0.0, 1.0) 之间的伪随机数,其中包括 0.0 但不包括 1.0。函数 `rand.Intn` 返回介于 [0, n) 之间的伪随机数。
|
||||
|
||||
你可以使用 `Seed(value)` 函数来提供伪随机数的生成种子,一般情况下都会使用当前时间的纳秒级数字(第 4.8 节)。
|
||||
|
||||
##4.5.3 运算符与优先级
|
||||
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
|
||||
|
||||
优先级 运算符
|
||||
7 ^ !
|
||||
6 * / % << >> & &^
|
||||
5 + - | ^
|
||||
4 == != < <= >= >
|
||||
3 <-
|
||||
2 &&
|
||||
1 ||
|
||||
|
||||
当然,你可以通过使用括号来临时提升某个表达式的整体运算优先级。
|
||||
|
||||
##4.5.4 类型别名
|
||||
当你在使用某个类型时,你可以给它起另一个名字,然后你就可以在你的代码中使用新的名字(用于简化名称或解决名称冲突)。
|
||||
|
||||
在 `type TZ int` 中,TZ 就是 int 类型的新名称(用于表示程序中的时区),然后就可以使用 TZ 来操作 int 类型的数据。
|
||||
|
||||
Example 4.11 [type.go](examples/chapter_4/type.go)
|
||||
|
||||
package main
|
||||
import “fmt”
|
||||
|
||||
type TZ int
|
||||
|
||||
func main() {
|
||||
var a, b TZ = 3, 4
|
||||
c := a + b
|
||||
fmt.Printf(“c has the value: %d”, c) // 输出:c has the value: 7
|
||||
}
|
||||
|
||||
实际上,类型别名得到的新类型并非和原类型完全相同,新类型不会拥有原类型所附带的方法(第 10 章);TZ 可以自定义一个方法用来输出更加人性化的时区信息。
|
||||
|
||||
**练习 4.5** 定义一个 `string` 的类型别名 `Rope`,并声明一个该类型的变量。
|
||||
|
||||
##4.5.5 字符类型
|
||||
严格来说,这并不是 Go 语言的一个类型,字符只是整数的特殊用例。`byte` 类型是 `uint8` 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题。例如:`var ch byte = 'A'`;字符使用单引号括起来。
|
||||
|
||||
在 ASCII 码表中,A 的值是 65,而使用 16 进制表示则为 41,所以下面的写法是等效的:
|
||||
|
||||
var ch byte = 65 或 var ch byte = ‘\x41’
|
||||
|
||||
(`\x` 总是紧跟着长度为 2 的 16 进制数)
|
||||
|
||||
另外一种可能的写法是 `\` 后面紧跟着长度为 3 的十进制数,例如:`\377`。
|
||||
|
||||
不过 Go 同样支持 Unicode(UTF-8),因此字符同样称为 Unicode 代码点或者 runes,并在内存中使用 int 来表示。在文档中,一般使用格式 U+hhhh 来表示,其中 h 表示一个 16 进制数。其实 `rune` 也是 Go 当中的一个类型,并且是 `int32` 的别名。
|
||||
|
||||
在书写 Unicode 字符时,需要在 16 进制数之前加上前缀 `\u` 或者 `\U`。
|
||||
|
||||
因为 Unicode 至少占用 2 个字节,所以我们使用 `int16` 或者 `int` 类型来表示。如果需要使用到 4 字节,则会加上 `\U` 前缀;前缀 `\u` 则总是紧跟着长度为 4 的 16 进制数,前缀 `\U` 紧跟着长度为 8 的 16 进制数。
|
||||
|
||||
Example 4.12 [char.go](examples/chapter_4/char.go)
|
||||
|
||||
var ch int = ‘\u0041’
|
||||
var ch2 int = ‘\u03B2’
|
||||
var ch3 int = ‘\U00101234’
|
||||
fmt.Printf(“%d - %d - %d\n”, ch, ch2, ch3) // integer
|
||||
fmt.Printf(“%c - %c - %c\n”, ch, ch2, ch3) // character
|
||||
fmt.Printf(“%X - %X - %X\n”, ch, ch2, ch3) // UTF-8 bytes
|
||||
fmt.Printf(“%U - %U - %U”, ch, ch2, ch3) // UTF-8 code point
|
||||
|
||||
输出:
|
||||
|
||||
65 - 946 - 1053236
|
||||
A - β - r
|
||||
41 - 3B2 - 101234
|
||||
U+0041 - U+03B2 - U+101234
|
||||
|
||||
格式化说明符 `%c` 用于表示字符;当和字符配合使用时,`%v` 或 `%d` 会输出用于表示该字符的整数;`%U` 输出格式为 U+hhhh 的字符串(另一个示例见第 5.4.4 节)。
|
||||
|
||||
包 `unicode` 包含了一些针对测试字符的非常有用的函数(其中 `ch` 代表字符):
|
||||
|
||||
判断是否为字母: unicode.IsLetter(ch)
|
||||
判断是否为数字: unicode.IsDigit(ch)
|
||||
判断是否为空白符号: unicode.IsSpace(ch)
|
||||
|
||||
这些函数返回一个布尔值。包 `utf8` 拥有更多与 rune 相关的函数。
|
||||
|
||||
( ***译者注:关于类型的相关讲解,可参考视频教程 《Go编程基础》 第 3 课:[类型与变量](https://github.com/Unknwon/go-fundamental-programming/blob/master/lecture3/lecture3.md)*** )
|
||||
|
||||
##链接
|
||||
- [目录](directory.md)
|
||||
|
22
eBook/04.6.md
Normal file
22
eBook/04.6.md
Normal file
@@ -0,0 +1,22 @@
|
||||
##啊哦,亲,你看得也太快了。。。还没翻译完呢 0 0
|
||||
要不等到 ***2013 年 6 月 11 日*** 再来看看吧~~
|
||||
|
||||
这里还有一些其它的学习资源噢~
|
||||
|
||||
- [《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 Walker](http://gowalker.org) **Go 项目文档在线浏览工具**
|
||||
- [Golang中文社区](http://bbs.mygolang.com/forum.php)
|
||||
- [Go语言学习园地](http://studygolang.com/)
|
||||
- [Golang中国](http://golang.tc)
|
||||
|
||||
#4.6 字符串
|
||||
|
||||
|
||||
##链接
|
||||
- [目录](directory.md)
|
||||
- 上一节:[基本类型和运算符](04.5.md)
|
||||
- 下一节:[strings 和 strconv 包](04.7.md)
|
@@ -33,6 +33,9 @@
|
||||
- 4.4 [变量](04.4.md)
|
||||
- 4.5 [基本类型和运算符](04.5.md)
|
||||
- 4.6 [字符串](04.6.md)
|
||||
- 4.7 [strings 和 strconv 包](04.7.md)
|
||||
- 4.8 [时间和日期](04.8.md)
|
||||
- 4.9 [指针](04.9.md)
|
||||
- 第5章:[控制结构](05.0.md)
|
||||
- 5.1 [if-else 结构](05.1.md)
|
||||
- 第6章:函数(function)
|
||||
|
Reference in New Issue
Block a user