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

@@ -335,6 +335,9 @@ 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)

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
}
```

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)
}
```