mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 05:33:04 +08:00
@@ -198,7 +198,7 @@ First 3 chars: Mon
|
|||||||
|
|
||||||
如果想要方法改变接收者的数据,就在接收者的指针类型上定义该方法。否则,就在普通的值类型上定义方法。
|
如果想要方法改变接收者的数据,就在接收者的指针类型上定义该方法。否则,就在普通的值类型上定义方法。
|
||||||
|
|
||||||
下面的例子 `pointer_value.go` 作了说明:`change()`接受一个指向 B 的指针,并改变它内部的成员;`write()` 接受通过拷贝接受 B 的值并只输出B的内容。注意 Go 为我们做了探测工作,我们自己并没有指出是否在指针上调用方法,Go 替我们做了这些事情。b1 是值而 b2 是指针,方法都支持运行了。
|
下面的例子 `pointer_value.go` 作了说明:`change()`接受一个指向 B 的指针,并改变它内部的成员;`write()` 通过拷贝接受 B 的值并只输出B的内容。注意 Go 为我们做了探测工作,我们自己并没有指出是否在指针上调用方法,Go 替我们做了这些事情。b1 是值而 b2 是指针,方法都支持运行了。
|
||||||
|
|
||||||
示例 10.13 pointer_value.go:
|
示例 10.13 pointer_value.go:
|
||||||
|
|
||||||
@@ -245,13 +245,13 @@ func (p Point3) Abs() float64 {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
这样做稍微有点昂贵,因为 `Point3` 是作为值传递给方法的,因此传递的是它的拷贝,这在 Go 中合法的。也可以在指向这个类型的指针上调用此方法(会自动解引用)。
|
这样做稍微有点昂贵,因为 `Point3` 是作为值传递给方法的,因此传递的是它的拷贝,这在 Go 中是合法的。也可以在指向这个类型的指针上调用此方法(会自动解引用)。
|
||||||
|
|
||||||
假设 `p3` 定义为一个指针:`p3 := &Point{ 3, 4, 5}`。
|
假设 `p3` 定义为一个指针:`p3 := &Point{ 3, 4, 5}`。
|
||||||
|
|
||||||
可以使用 `p3.Abs()` 来替代 `(*p3).Abs()`。
|
可以使用 `p3.Abs()` 来替代 `(*p3).Abs()`。
|
||||||
|
|
||||||
像例子 10.11(method1.go)中接收者类型是 `*TwoInts` 的方法 `AddThem()`,它能在类型 `TwoInts` 的值上被调用,这是自动间接发生的。
|
像例子 10.10(method1.go)中接收者类型是 `*TwoInts` 的方法 `AddThem()`,它能在类型 `TwoInts` 的值上被调用,这是自动间接发生的。
|
||||||
|
|
||||||
因此 `two2.AddThem` 可以替代 `(&two2).AddThem()`。
|
因此 `two2.AddThem` 可以替代 `(&two2).AddThem()`。
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user