首页 > 《Go语言编程》第四章完整示例问题

《Go语言编程》第四章完整示例问题

继续国庆前的关于《Go语言编程》本书的练习,报告问题,解决问题。
第四章的示例 一看风格应该是许式伟的,总体结构很清楚,跟第二章的示例一样的目录结构风格。
这章问题不多,

  1. 同样是因为编排问题的elseif
  2. 整个示例中因为是只演示部分功能,缺少了Room这个struct 编译的时候会出错,简单解决办法就是放置一空的struct
  3. 这一章最后一个错误,我发现在上一章也有,就是在切片的时候,容易忽略一个问题。

在cg/center.go 的removePlayer中有这样一段

if i == len( server.players) - 1{
                server.players=server.players[:i-1]
            }

意思就是在如果remove的player是最后一个的时候,就切片slice最开始到这个之前的,表面上看这是对的,但实际上切片如果写成players[:i]是不包括第i个的,所以这里会多删除一个player而且如果只有2个player的情况下这个就为空了。
Command>
listplayer
Failed. No player online.
所以修改成

if i == len( server.players) - 1{
                server.players=server.players[:i]
            }

以上结果是实例测试的,欢迎补充和说明。


书上的代码,还是http://www.ituring.com.cn/book/967的代码都是存在错误的。

ipc_test.go文件下, 1、Handle方法和server.go文件中Server接口申明方法不一致,编译肯定通不过; 2、client1.Call,client2.Call的参数调用不一致; 3、resp1怎么可以和"***"字符串类型比较;


作者在这啊,请教一下第四章的channel.go 里面的问题,前面讲到 chan如果被读取了,goroutine就结束了.
package main

import "fmt"

func Count(ch chan int) {
fmt.Println("Counting")
ch <- 1
fmt.Println("看看是否返回了") //这里为什么还会打印出来
}

func main() {
chs := make([]chan int, 10)
for i := 0; i < 10; i++ {
chs[i] = make(chan int)
go Count(chs[i])
}

for _, ch := range chs {
    <-ch

}

}

输出结果如下:
Counting
看看是否返回了
Counting
Counting
Counting
Counting
Counting
Counting
Counting
Counting
Counting


Ajian其实已经边问边回答了自己的问题,我就不重复的再解释一遍了。书本上的例子确实没有刻意去保持完整性,因为书中引的代码应该是用于阅读用的,而非执行目的。本书是有相应的源代码包下载的,直接下载后编译运行相关的例子即可,不需要苦逼的对着抄一遍。

源代码包请见这个页面的随书下载部分:http://www.ituring.com.cn/book/967。

【热门文章】
【热门文章】