【发布时间】:2014-12-07 09:36:06
【问题描述】:
考虑以下示例: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 中可能不需要指针。
【问题讨论】: