Where exactly did this land? Seems like an important conversation...

```
// RPCHandler passes RPCReq and RPCRes as fn args
func RPCHandler[T RPCReq, S RPCRes](fn func(T, S)) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        req := T{}
        if err := reqBodyReadAll(w, r, &req); err != nil {
            resWriteErr(w, err)
            return
        }
        res := S{}
        fn(req, res)
        resWriteAll(w, r, res)
    }
}
```
On Wednesday, 24 June 2020 at 17:03:51 UTC-7 ren...@ix.netcom.com wrote:

> But if you interpret the method as ‘format this struct’ a struct has named 
> fields. A primitive has no named fields so the output is empty. 
>
> It is almost always easier to define the contract if the method in an 
> unbreakable way than rely on the compiler to catch all problems. 
>
> For example what do you get if you pass an empty struct ?
>
> On Jun 24, 2020, at 6:34 PM, Pee Jai <p...@pjebs.com.au> wrote:
>
> 
>
> I disagree. A type constraint for a struct would definitely provide 
> compile-time guarantee that only a struct can be used. 
>
> On Thursday, June 25, 2020 at 8:18:13 AM UTC+10, Ian Lance Taylor wrote:
>>
>> On Wed, Jun 24, 2020 at 12:22 PM David Finkel <david...@gmail.com> 
>> wrote: 
>> > 
>> > On Wed, Jun 24, 2020 at 9:34 AM Robert Engels <ren...@ix.netcom.com> 
>> wrote: 
>> >> 
>> >> Generics will not solve this fully anyway - you’ll still need 
>> reflection. Why not just return empty if the user doesn’t pass a struct? 
>> >> 
>> > That sounds like a bug waiting to happen. 
>> > 
>> > I have a library with a similar reflection-related use-case involving 
>> reflection, which currently panics when it gets a non-struct-type. It would 
>> be nice to have compile-time type-checking, if possible. 
>>
>>
>> Generics don't solve all problems.  I'm inclined to say that this is a 
>> problem that they don't solve.  Sorry. 
>>
>> Ian 
>>
>>
>>
>>
>> >> On Jun 24, 2020, at 8:29 AM, Pee Jai <p...@pjebs.com.au> wrote: 
>> >> 
>> >>  
>> >> Here is my use case: 
>> https://godoc.org/github.com/rocketlaunchr/react#UnmarshalState 
>> >> 
>> >> That function has an argument that accepts only a struct. I use the 
>> reflect package to iterate over the structs fields (and also to check if it 
>> actually is a struct). The function has notapplicability for non-structs. 
>> >> 
>> >> Currently I have to notify the user via documentation that only a 
>> struct is allowed since the type is officially an `interface{}`. This is 
>> very crude. 
>> >> 
>> >> If there was a way to add a type constraint for only structs, then I 
>> don't need to use documentation, notwithstanding the use of reflect package 
>> to iterate over the struct fields. 
>> >> 
>> >> On Wednesday, June 24, 2020 at 10:34:40 AM UTC+10, Ian Lance Taylor 
>> wrote: 
>> >>> 
>> >>> On Mon, Jun 22, 2020 at 7:08 PM Pee Jai <p...@pjebs.com.au> wrote: 
>> >>> > 
>> >>> > I can't find a way to constrain for just structs. I don't want 
>> primitives. 
>> >>> 
>> >>> The design draft doesn't provide any mechanism for a type constraint 
>> >>> to match any arbitrary struct type, and not any other kind of type. 
>> >>> 
>> >>> But it's not clear why that would be useful.  The only things you can 
>> >>> do with a value of an arbitrary struct type are things that you can 
>> do 
>> >>> with a value of any arbitrary type. 
>> >>> 
>> >>> 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 golan...@googlegroups.com. 
>> >> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/e86e677b-784d-47c5-b8b9-aedc37977ba5o%40googlegroups.com.
>>  
>>
>> >> 
>> >> -- 
>> >> 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 golan...@googlegroups.com. 
>> >> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/8013EEB8-78E6-455D-B846-8A826682B879%40ix.netcom.com.
>>  
>>
>> > 
>> > -- 
>> > 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 golan...@googlegroups.com. 
>> > To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/CANrC0BgyoPvEWJEOOrJwt-3qfLvSxc6CX9yLoYBPxYZV8GBZLg%40mail.gmail.com.
>>  
>>
>>
> -- 
> 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/b15a841e-46bd-450f-8c71-d4429700b050o%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/golang-nuts/b15a841e-46bd-450f-8c71-d4429700b050o%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/13f26590-39ce-4153-a8d8-20d0c1036e92n%40googlegroups.com.

Reply via email to