Got one: https://rakyll.org/generics-proposal/
At the very bottom of the page, a person wrote a strange code func Do(type T io.Reader)(r T) { switch r.(type) { case io.ReadCloser: fmt.Println("ReadCloser") } } prog.go2:19:9: r (variable of type T) is not an interface type and has a strange question. They are strange, but still valid: why can't I cast an interface to another one. Because this is a source of confusion, two kinds of interfaces where one is called interface but is not actually an interface. So, points are: - Two kind of interfaces appear, where one cannot be used anywhere except a contract: https://go2goplay.golang.org/p/rYOD-n_mV9U - There's a confusion between an interface used as a contract and an interface. People think if they have interface contract their type is an interface (it is not of course): https://www.reddit.com/r/golang/comments/hamaxm/few_things_on_generics_go_the_unwritten_parts/fv66zp8/?context=3. A brainless example of course, but still an example. - If fields will be allowed to be a part of contract (limiting allowed types to structs having some set of fields of certain types) the difference between interfaces and interfaces for contracts will grow even bigger. I see lots of questions like fron ones who just start learning Go "why can't I use a pure field interface as a function parameter type?" - contract also meant a built-in mechanism of type bounding, with interfaces you need to promote each type exclusively, the increased signature size is the consequence of this. Remeber, with contracts you may put a constraint on each of the parameter types and with an interface you should write them all. - interface flood. There's a possibility to use them as an variable/paremeter/return value type although they are only needed for a generic contract. пятница, 19 июня 2020 г., 0:07:45 UTC+3 пользователь Denis Cheremisov написал: > > > clear feedback on earlier versions of the design draft that contracts > could be hard to understand. > > Yeah, sure. Now expect lots of materials throughout the web explaining > "this part is for interface that is not supposed to be in a runtime but for > compile time constraints". You understand better than me albeit these > concepts (interfaces and contractrs) has a lot in common they are not the > same. At last, take your language as an example: it shines as a glue > between services and its set of primitives (goroutines, channels, full > async) is what made it so successful in this domain. But you won't try to > use it for serious Linux kernel module. You won't even try these primitives > for GUI development (which also has asynchronous nature) because they have > a huge overweight for the task. > > > > PS I am afraid these people I were listening also want <> > > > четверг, 18 июня 2020 г., 1:11:22 UTC+3 пользователь Ian Lance Taylor > написал: >> >> On Wed, Jun 17, 2020 at 9:58 AM Denis Cheremisov >> <denis.c...@gmail.com> wrote: >> > >> > IMO a groups of constraints are horrible with interfaces >> > >> > type CommonResponse(type E) interface { >> > GetError() E >> > } >> > >> > type CommonError interface { >> > GetCode() int32 >> > } >> > >> > func IsOK(type R CommonResponse(E), E CommonError)(r R) bool { >> > switch r.GetError().GetCode() { >> > case 0, 200, 201: >> > return true >> > default: >> > return false >> > } >> > } >> > >> > vs >> > >> > constract CommmonResponse(R, E) { >> > R GetError() E >> > E GetCode() int32 >> > } >> > >> > func IsOK(type R, E CommonResponse)(r R) bool { >> > switch r.GetError().GetCode() { >> > case 0, 200, 201: >> > return true >> > default: >> > return false >> > } >> > } >> > >> > That trickery with commas to express dependcy of types is hard >> >> >> I think there is no question that complex cases are more difficult to >> express using parameterized interfaces as constraints. >> >> But the overall change to the language seems to be simpler. There was >> clear feedback on earlier versions of the design draft that contracts >> could be hard to understand. And with parameterized interfaces as >> constraints it is still possible to express the complex cases, albeit >> in a more complicated way. It's OK if complicated are hard to >> express, as long as they remain possible. >> >> 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/22dd5894-f2de-451d-ab78-4c90b0da0b92o%40googlegroups.com.