On Sun, Feb 24, 2019 at 2:50 PM <roj...@gmail.com> wrote: > > On Sunday, February 24, 2019 at 9:36:07 PM UTC, rog wrote: >> >> Foo is declared as a new type, and no methods are declared on that that >> type. If you had declared: >> >> type Foo = *Foo >> >> it would have been a different matter. > > > true. however, i don't want a type alias because that would make it possible > to copy f2 by dereferencing the pointer (f3 = *f2). > > the reason i don't want that is because in my real use case foo contains a > pointer to a CGo struct, which has its lifetime managed by a finalizer. > i don't want copies of that pointer made, so i thought that i can force > pointer-only usage of foo (via Foo) and that'd be that.
Would embedding work? https://play.golang.org/p/ddgibx1kYJi I probably misunderstood the above statement, but I think it should be possible to extend this to achieve what you want. > > it's also not possible to declare methods on pointer types (for a reason > explained here, which makes sense), so `func (f Foo) GetBar() { ... }` is a > no-go. > > it still seems to me that Foo.GetBar should resolve to (*foo).GetBar, since > Foo -> *foo is unambiguous. why not? > >> >> >> On Sun, 24 Feb 2019, 10:30 pm , <roj...@gmail.com> wrote: >>> >>> Why can't Go resolve methods declared on the pointer receiver of the >>> destination type? >>> >>> consider: >>> >>> type foo struct{ >>> bar int >>> } >>> >>> type Foo *foo >>> >>> func (f *foo) GetBar() int { >>> return f.bar >>> } >>> >>> func NewFoo(bar int) Foo { >>> return &foo{bar: bar} >>> } >>> >>> func main() { >>> f1 := &foo{bar: 123} >>> fmt.Printf("%d\n", f1.GetBar()) >>> f2 := NewFoo(456) >>> fmt.Printf("%d\n", f2.GetBar()) >>> } >>> >>> >>> (playground link: https://play.golang.org/p/v0f9pYaTJAa ) >>> >>> it fails to compile with "prog.go:25:23: f2.GetBar undefined (type Foo has >>> no field or method GetBar)" but it's not clear to me, why Foo doesn't get >>> pointer methods from *foo. >>> >>> -- >>> 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 golang-nuts...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. > > -- > 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 golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- 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 golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.