diff --git a/README.md b/README.md index 4a8e1d5..f74d7e3 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ Go语言圣经 [《The Go Programming Language》](http://gopl.io) 中文版本 - http://shifei.me/gopl-zh/ - http://2goo.info/media/html/gopl-zh-gh-pages/ - http://docs.plhwin.com/gopl-zh/ -- http://gopl-zh.simple-is-best.tk/ - https://docs.hacknode.org/gopl-zh/ **注意,在线预览不是最新版,最新以仓库里的内容为准** diff --git a/ch6/ch6-01.md b/ch6/ch6-01.md index 87d7aa6..f6490dd 100644 --- a/ch6/ch6-01.md +++ b/ch6/ch6-01.md @@ -57,7 +57,7 @@ func (path Path) Distance() float64 { } ``` -Path是一个命名的slice类型,而不是Point那样的struct类型,然而我们依然可以为它定义方法。在能够给任意类型定义方法这一点上,Go和很多其它的面向对象的语言不太一样。因此在Go语言里,我们为一些简单的数值、字符串、slice、map来定义一些附加行为很方便。方法可以被声明到任意类型,只要不是一个指针或者一个interface。 +Path是一个命名的slice类型,而不是Point那样的struct类型,然而我们依然可以为它定义方法。在能够给任意类型定义方法这一点上,Go和很多其它的面向对象的语言不太一样。因此在Go语言里,我们为一些简单的数值、字符串、slice、map来定义一些附加行为很方便。我们可以给同一个包内的任意命名类型定义方法,只要这个命名类型的底层类型(译注:这个例子里,底层类型是指[]Point这个slice,Path就是命名类型)不是指针或者interface。 两个Distance方法有不同的类型。他们两个方法之间没有任何关系,尽管Path的Distance方法会在内部调用Point.Distance方法来计算每个连接邻接点的线段的长度。 diff --git a/ch6/ch6-05.md b/ch6/ch6-05.md index 3e174e4..79e14b0 100644 --- a/ch6/ch6-05.md +++ b/ch6/ch6-05.md @@ -96,7 +96,7 @@ fmt.Println(x) // "{[4398046511618 0 65536]}" 在第一个Println中,我们打印一个`*IntSet`的指针,这个类型的指针确实有自定义的String方法。第二Println,我们直接调用了x变量的String()方法;这种情况下编译器会隐式地在x前插入&操作符,这样相当远我们还是调用的IntSet指针的String方法。在第三个Println中,因为IntSet类型没有String方法,所以Println方法会直接以原始的方式理解并打印。所以在这种情况下&符号是不能忘的。在我们这种场景下,你把String方法绑定到IntSet对象上,而不是IntSet指针上可能会更合适一些,不过这也需要具体问题具体分析。 -练习6.1: 为bit数组实现下面这些方法 +**练习6.1:** 为bit数组实现下面这些方法 ```go func (*IntSet) Len() int // return the number of elements @@ -105,9 +105,10 @@ func (*IntSet) Clear() // remove all elements from the set func (*IntSet) Copy() *IntSet // return a copy of the set ``` -**练习 6.2:** 定义一个变参方法(*IntSet).AddAll(...int),这个方法可以为一组IntSet值求和,比如s.AddAll(1,2,3)。 +**练习 6.2:** 定义一个变参方法(*IntSet).AddAll(...int),这个方法可以添加一组IntSet,比如s.AddAll(1,2,3)。 **练习 6.3:** (*IntSet).UnionWith会用|操作符计算两个集合的交集,我们再为IntSet实现另外的几个函数IntersectWith(交集:元素在A集合B集合均出现),DifferenceWith(差集:元素出现在A集合,未出现在B集合),SymmetricDifference(并差集:元素出现在A但没有出现在B,或者出现在B没有出现在A)。 -练习6.4: 实现一个Elems方法,返回集合中的所有元素,用于做一些range之类的遍历操作。 + +***练习6.4: ** 实现一个Elems方法,返回集合中的所有元素,用于做一些range之类的遍历操作。 **练习 6.5:** 我们这章定义的IntSet里的每个字都是用的uint64类型,但是64位的数值可能在32位的平台上不高效。修改程序,使其使用uint类型,这种类型对于32位平台来说更合适。当然了,这里我们可以不用简单粗暴地除64,可以定义一个常量来决定是用32还是64,这里你可能会用到平台的自动判断的一个智能表达式:32 << (^uint(0) >> 63) diff --git a/ch7/ch7-14.md b/ch7/ch7-14.md index 9fc3fcd..a6a0903 100644 --- a/ch7/ch7-14.md +++ b/ch7/ch7-14.md @@ -108,7 +108,13 @@ html body div div h2: B Definitions for Character Normalization ... ``` -**练习 7.17:** 扩展xmlselect程序以便让元素不仅仅可以通过名称选择,也可以通过它们CSS样式上属性进行选择;例如一个像这样