mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 23:08:34 +08:00
阅读第十章, 并作少量校对修正
This commit is contained in:
@@ -141,7 +141,7 @@ func (t time.Time) first3Chars() string {
|
||||
|
||||
类型在在其他的,或是非本地的包里定义,在它上面定义方法都会得到和上面同样的错误。
|
||||
|
||||
但是有一个绕点的方式:可以先定义该类型(比如:int 或 float)的别名类型,然后再为别名类型定义方法。或者像下面这样将它作为匿名类型嵌入在一个新的结构体中。当然方法只在这个别名类型上有效。
|
||||
但是有一个间接的方式:可以先定义该类型(比如:int 或 float)的别名类型,然后再为别名类型定义方法。或者像下面这样将它作为匿名类型嵌入在一个新的结构体中。当然方法只在这个别名类型上有效。
|
||||
|
||||
示例 10.12 method_on_time.go:
|
||||
|
||||
@@ -235,7 +235,7 @@ func main() {
|
||||
|
||||
试着在 `write()` 中改变接收者b的值:将会看到它可以正常编译,但是开始的 b 没有被改变。
|
||||
|
||||
我们知道方法不需要指针作为接收者,如下面的例子,我们只是需要 `Point3` 的值来做计算:
|
||||
我们知道方法将指针作为接收者不是必须的,如下面的例子,我们只是需要 `Point3` 的值来做计算:
|
||||
|
||||
```go
|
||||
type Point3 struct { x, y, z float }
|
||||
@@ -658,7 +658,7 @@ func (i *Integer) String() string {
|
||||
|
||||
在 Go 中,类型就是类(数据和关联的方法)。Go 不知道类似面向对象语言的类继承的概念。继承有两个好处:代码复用和多态。
|
||||
|
||||
在 Go 中,代码复用通过组合和委托实现,多态通过接口的使用来实现:有时这也叫 **组件编程**。
|
||||
在 Go 中,代码复用通过组合和委托实现,多态通过接口的使用来实现:有时这也叫 **组件编程(component programming)**。
|
||||
|
||||
许多开发者说相比于类继承,Go 的接口提供了更强大、却更简单的多态行为。
|
||||
|
||||
|
@@ -45,7 +45,7 @@ func (tn *TwoInts) String() string {
|
||||
|
||||
**备注**
|
||||
|
||||
不要在 `String()` 方法里面调用涉及 `String()` 方法的方法,它会导致意料之外的错误,比如下面的例子,它导致了一个无限迭代调用(`TT.String()` 调用 `fmt.Sprintf`,而 `fmt.Sprintf` 又会反过来调用 `TT.String()`...),很快就会导致内存溢出:
|
||||
不要在 `String()` 方法里面调用涉及 `String()` 方法的方法,它会导致意料之外的错误,比如下面的例子,它导致了一个无限迭代(递归)调用(`TT.String()` 调用 `fmt.Sprintf`,而 `fmt.Sprintf` 又会反过来调用 `TT.String()`...),很快就会导致内存溢出:
|
||||
|
||||
```go
|
||||
type TT float64
|
||||
|
Reference in New Issue
Block a user