Рассмотрим следующий пример: 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)
}
Unfortunatelly Мне нужно 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.
Ницца, мы видим этот шаблон повсюду внутри go std libs. – marcio