Sorry, I literally just fell out of bed, so I jumped on the first thing I
saw, which probably isn't the most helpful answer.
You might be interested in this sentence from the Go 1.18 release notes
<https://go.dev/doc/go1.18#generics>:

The Go compiler does not support accessing a struct field x.f where x is of
> type parameter type even if all types in the type parameter's type set have
> a field f. We may remove this restriction in a future release.


So while what I said is correct - the underlying type of Bar *isnt* Foo - I
think the more disappointing fact is that what you want to do just won't
work for now. It might in the future, but not right now.

On Sat, Oct 22, 2022 at 7:12 AM Axel Wagner <axel.wagner...@googlemail.com>
wrote:

> (or, for convenience, you can use a type alias `type foo = struct{ data
> []string }`, which should allow you to write ~foo.
>
> On Sat, Oct 22, 2022 at 7:11 AM Axel Wagner <axel.wagner...@googlemail.com>
> wrote:
>
>>
>>
>> On Sat, Oct 22, 2022 at 1:40 AM 'Aaron Beitch' via golang-nuts <
>> golang-nuts@googlegroups.com> wrote:
>>
>>> I have types Foo and Bar. Bar's underlying type is Foo.
>>>
>>
>> The underlying type is defined recursively and always either a
>> predeclared type (int, string…), or a type literal.
>> The underlying type of Bar is the underlying type of Foo, which is struct
>> { data []string }. You might try using `~struct{ data []string }`.
>>
>>
>>> I want a function that takes in pointers to types whose underlying type
>>> is Foo, but I get a compile error when trying to call this function:
>>>
>>>     *Bar does not implement ~*Foo (*Bar missing in ~*main.Foo)
>>>
>>> Should this work?
>>>
>>> My real use case is around a hash map library. It's implementation is a
>>> copy of Go's built-in map, but allows the user to control the equal and
>>> hash function, thus allowing keys of any type rather than just comparable
>>> types. github.com/aristanetworks/gomap
>>>
>>> I would like to provide helper functions
>>> <https://github.com/aristanetworks/gomap/blob/main/funcs.go> for
>>> gomap.Map similar to those provided by golang.org/x/exp/maps and for
>>> those helpers to work on pointers to types whose underlying type is
>>> gomap.Map.
>>>
>>> Thanks,
>>> Aaron
>>>
>>>
>>> --
>>> 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.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/d6c4621a-13d8-4cd2-b777-eef7a200cca2n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/golang-nuts/d6c4621a-13d8-4cd2-b777-eef7a200cca2n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfEUJU5etMs4fWUXE8gnCr-o-7ZC8L5A5TY_mTaseSCJww%40mail.gmail.com.

Reply via email to