mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:06:41 +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:
|
||||
|
||||
@@ -245,13 +245,13 @@ func (p Point3) Abs() float64 {
|
||||
}
|
||||
```
|
||||
|
||||
这样做稍微有点昂贵,因为 `Point3` 是作为值传递给方法的,因此传递的是它的拷贝,这在 Go 中合法的。也可以在指向这个类型的指针上调用此方法(会自动解引用)。
|
||||
这样做稍微有点昂贵,因为 `Point3` 是作为值传递给方法的,因此传递的是它的拷贝,这在 Go 中是合法的。也可以在指向这个类型的指针上调用此方法(会自动解引用)。
|
||||
|
||||
假设 `p3` 定义为一个指针:`p3 := &Point{ 3, 4, 5}`。
|
||||
|
||||
可以使用 `p3.Abs()` 来替代 `(*p3).Abs()`。
|
||||
|
||||
像例子 10.11(method1.go)中接收者类型是 `*TwoInts` 的方法 `AddThem()`,它能在类型 `TwoInts` 的值上被调用,这是自动间接发生的。
|
||||
像例子 10.10(method1.go)中接收者类型是 `*TwoInts` 的方法 `AddThem()`,它能在类型 `TwoInts` 的值上被调用,这是自动间接发生的。
|
||||
|
||||
因此 `two2.AddThem` 可以替代 `(&two2).AddThem()`。
|
||||
|
||||
|
Reference in New Issue
Block a user