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.

Reply via email to