If I understand correctly, the restriction is that the compiler has to know all possible instantiations of a generic func/type/etc at compile time. So listing out each specific Hello instantiation is the workaround, which allows you to approximate this if you have a closed set of types you want to use. Assuming your Hello function truly doesn't need inputs or outputs it's actually pretty simple, for a closed set of types: https://go.dev/play/p/JAw4tXOLwYT. If you need inputs/outputs of type T then you have to do more hoop jumping, or just invoke the function through reflect.
Depending on what the rest of the code looks like, you could convince the compiler to do what you want if you are just passing functions statically and making Do a generic function too. Again, it's all about just making sure the compiler can transitively find all of the real instantiated types when things are eventually used. If you share more code maybe my example can be better, but here's the sort of thing I mean: https://go.dev/play/p/AanjJKg8Hf_i But obviously this workaround won't work if you really need things to be dynamic. On Tuesday, April 9, 2024 at 10:51:06 AM UTC-6 Ian Lance Taylor wrote: > On Tue, Apr 9, 2024 at 9:41 AM Mihai Barbu <ad...@hopz.com> wrote: > > > > I need to call some generic functions with types that are now known at > compile time. Is it possible to do this? > > See the code below (vastly reduced). > > > > // fv is a function that returns an unknown type > > func Do(fv reflect.Value){ > > // get the first returned type by function fv > > vt := fv.Type().Out(0) > > // how to call `Hello` with `v` ? > > // Obviously the code below is incorrect > > Hello[vt]() > > } > > > > func Hello[T any](){ > > // do something with T > > json.Marshal(new(T)) > > } > > This is not possible. Sorry. > > Ian > -- 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/4a3051a0-cba3-4f91-92a1-4954b315ff75n%40googlegroups.com.