请看下面的例子:http://play.golang.org/p/eAot_sVwND如何避免需要指针接收器的接口方法实现?
package main
import "fmt"
type Incrementor interface {
Increment()
}
type Counter struct {
i int
Incrementor
}
func (c *Counter) Increment(){
c.i++
}
func main() {
var c Incrementor
c = &Counter{}
c.Increment()
fmt.Println(c)
}
可惜的是,我需要c = &Counter{}
因为Counter.Increment()
实现有一个指针接收器,否则c.Increment()
通话将无法修改c.x
属性:
func (c Counter) Increment(){
c.i++ // no errors, but now we increment c.x having a copy of c as context
}
如何使原始实施在c = &Counter{}
上没有&
?换句话说,如何避免对指针接收器的需求在C.Increment
执行?
这只是一个问题,但我认为也许一个指针在Go中没有必要这样做。
不错,我们看到这个模式遍布在std libs中。 – marcio 2014-12-07 17:08:31