請看下面的例子: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