On Saturday, March 25, 2017 at 9:20:06 AM UTC+8, st ov wrote:
>
> Is it idiomatic to mix-&-match pointer and value method receivers for a
> given type?
> or in *general*, if a single method requires a pointer receiver than *all
> methods* should take a pointer, regardless if a value receiver is
> appropriate?
>
You should only use non-pointer receivers in two occasions:
1. the size of receiver type is small and the method doesn't modify the
receiver (getter methods).
2. you really want to derive a new value from the receiver.
For example:
func (t T) Foo() Bar {
return t.foo
}
func (t T) Clone() T {
return t
}
>
> For example, should Foo.SetVal also be a pointer receiver even though a
> value receiver would be acceptable?
> https://play.golang.org/p/rd_6BLol8O
>
> type Foo struct{
> ref []int
> val int
> }
>
> // would not set if method receiver is value receiver (foo Foo)
> func (foo *Foo) SetRef(ref []int) {
> foo.ref = ref
> }
> func (foo Foo) SetVal(val int) {
> foo.val = val
> }
>
> func main() {
> foo := Foo{}
> foo.SetRef([]int{1,2,3})
> foo.SetVal(1)
>
> fmt.Printf("%v",foo) // {[1 2 3] 0}
> }
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.