Thanks for your help here! You helped me realize the thing I really want access to is the methods of Foo and Bar, and not the struct fields (my example was misleading).
What I would really like to have is a constraint that the type must have an underlying type of Foo, but that isn't working how I want. So, what I can do instead is define an interface that includes the methods that Foo provides and use that as my constraint. https://go.dev/play/p/BwEb8Lm4pb6 Aaron On Friday, October 21, 2022 at 10:44:57 PM UTC-7 axel.wa...@googlemail.com wrote: > Actually (maybe I should stop, think, and then E-Mail) this works: > https://go.dev/play/p/SBDglnj8mQx > I'm not sure if the selector X(*a).data will actually copy the value, but > I don't *think* it does. > I also tried this first: https://go.dev/play/p/3qUhyOkvcVm > The fact that this doesn't work looks like a bug to me, to be honest. > > On Sat, Oct 22, 2022 at 7:36 AM Axel Wagner <axel.wa...@googlemail.com> > wrote: > >> 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.wa...@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.wa...@googlemail.com> >>> wrote: >>> >>>> >>>> >>>> On Sat, Oct 22, 2022 at 1:40 AM 'Aaron Beitch' via golang-nuts < >>>> golan...@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...@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/5b049c16-2dfc-43eb-bde1-e9627a08ab27n%40googlegroups.com.