This commit is contained in:
kuuyee
2015-10-20 17:12:06 +08:00
5 changed files with 12 additions and 9 deletions

View File

@@ -334,7 +334,10 @@ func main() {
```
输出:
64 位系统:
The size of ints is: 64
32 位系统:
The size of ints is: 32
The integer is: 666
The new string is: 671

View File

@@ -49,7 +49,7 @@ fibonacci(10) is: 89
许多问题都可以使用优雅的递归来解决,比如说著名的快速排序算法。
在使用递归函数时经常会遇到的一个重要问题就是栈溢出:一般出现在大量的递归调用导致的程序栈内存分配耗尽。这个问题可以通过一个名为懒惰评估的技术解决,在 Go 语言中我们可以使用管道channel和 goroutine详见第 14.8 节)来实现。练习 14.12 也会通过这个方案来优化斐波那契数列的生成问题。
在使用递归函数时经常会遇到的一个重要问题就是栈溢出:一般出现在大量的递归调用导致的程序栈内存分配耗尽。这个问题可以通过一个名为[懒惰求值](https://zh.wikipedia.org/wiki/惰性求值)的技术解决,在 Go 语言中我们可以使用管道channel和 goroutine详见第 14.8 节)来实现。练习 14.12 也会通过这个方案来优化斐波那契数列的生成问题。
Go 语言中也可以使用相互调用的递归函数:多个函数之间相互调用形成闭环。因为 Go 语言编译器的特殊性,这些函数的声明顺序可以是任意的。下面这个简单的例子展示了函数 odd 和 even 之间的相互调用(示例 6.14 [mut_recurs.go](examples/chapter_6/mut_recurs.go)
@@ -116,4 +116,4 @@ n! 的阶乘定义为:`n! = n * (n-1)!, 0! = 1`,因此它非常适合使用
- [目录](directory.md)
- 上一节:[内置函数](06.5.md)
- 下一节:[将函数作为参数](06.7.md)
- 下一节:[将函数作为参数](06.7.md)

View File

@@ -73,7 +73,7 @@ for row := range screen {
}
```
**问题 7.5** 假设我们有如下切片`items := [...]int{10, 20, 30, 40, 50}`
**问题 7.5** 假设我们有如下数组`items := [...]int{10, 20, 30, 40, 50}`
a) 如果我们写了如下的 for 循环,那么执行完 for 循环后的 `items` 的值是多少?如果你不确定的话可以测试一下:)

View File

@@ -228,7 +228,7 @@ type Node struct {
type Node struct {
pr *Node
data float64
su *su
su *Node
}
```
@@ -285,7 +285,7 @@ func main() {
提示:
VCard 必须包含住址,它应该以值类型还是以指针类型放在 VCard 中呢?
第二种会好点,因为它占用内存少。包含一个名字和两个指向地址的指针的 Address 结构体可以使用 %v 打印:
{Kersschot 0x126d2b80 0x126d2be0}
{Kersschot 0x126d2b80 0x126d2be0}
**练习 10.2** persionext1.go
@@ -293,7 +293,7 @@ func main() {
**练习 10.3** point.go
使用坐标 X、Y 定义一个二维 Point 结构体。同样地,对一个三维点使用它的极坐标定义一个 Polar 结构体。实现一个 `Abs()` 方法来计算一个 Point 表示的向量的长度,实现一个 `Scale` 方法,它将点的坐标乘以一个尺度因子(提示:使用 `math` 包里的 `Sqrt` 函数function Scale that multiplies the coordinates of a point with a scale
使用坐标 X、Y 定义一个二维 Point 结构体。同样地,对一个三维点使用它的极坐标定义一个 Polar 结构体。实现一个 `Abs()` 方法来计算一个 Point 表示的向量的长度,实现一个 `Scale` 方法,它将点的坐标乘以一个尺度因子(提示:使用 `math` 包里的 `Sqrt` 函数function Scale that multiplies the coordinates of a point with a scale
factor
**练习 10.3** rectangle.go

View File

@@ -2,7 +2,7 @@
## 10.2.1 结构体工厂
Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工厂“ 方法。为了方便通常会为类型定义一个工厂,惯例,工厂的名字以 new 或 New 开头。假设定义了如下的 File 结构体类型:
Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工厂“ 方法。为了方便通常会为类型定义一个工厂,惯例,工厂的名字以 new 或 New 开头。假设定义了如下的 File 结构体类型:
```go
type File struct {
@@ -19,7 +19,7 @@ func NewFile(fd int, name string) *File {
return nil
}
return &File(id, name)
return &File(fd, name)
}
```