That is true, it would be done that way, so not an issue. Sorry for the tangent.
I still don’t understand when ‘like T’ when T is a concrete type. It seems
daunting, unless you use the containment as outlined previously - but a X
containing T, is far different than X being a T, and I am not sure the
semantics of the function will hold.
Imagine a
type Node struct {
link *Node
}
then you have a linked list
type LinkedList struct {
head *node
}
with
func (LinkedList *) Add(n like Node){ blah..}
passing a
struct MyNode {
Node
value int
}
will not work, because the reference passed to Add() points to inner instance.
you would need to create:
struct MyNode {
Link *Node
value int
}
and make link exported - meaning you need to understand the internal details of
LinkedList in order to use it.
At least I think so… :)
> On Oct 18, 2018, at 10:03 AM, Burak Serdar <[email protected]> wrote:
>
> On Thu, Oct 18, 2018 at 8:53 AM Robert Engels <[email protected]> wrote:
>>
>>
>>
>>> On Oct 18, 2018, at 9:41 AM, Burak Serdar <[email protected]> wrote:
>>>
>>> If X is a struct type, any type implementing all the methods of X and
>>> containing all the fields of X can be substituted
>>
>> The above is the problem. This almost certainly requires dynamic access to
>> fields, essentially making all method and field access dynamic, and I don’t
>> think the Go performance hounds will go for it. I am
>
> I don't understand this concern either.
>
> func F(in like T)
>
> is a template. When the compiler instantiates F with a concrete type
> T, a new copy of F is compiled using that type. There is no dynamic
> access involved there, everything is statically resolved.
>
> not even certain it can be done without runtime reflection.
>>
>> But still a developer having to create a Bar with all of the exported
>> methods and fields of Foo seems daunting.
>
> --
> 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.
--
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.