4 ms·
You'd just want to have your types implement the interface for Reply, and provide a method with the same signature that clients can use. Here's what I think yo
by ansible 14y ago
You'd just want to have your types implement the interface for Reply, and provide a method with the same signature that clients can use.
Here's what I think you want, written in (as far as I am able to) idiomatic Go:
http://play.golang.org/p/KI79ynfRg2 http://play.golang.org/p/KI79ynfRg2
- quatrevingts 14y agoThis means that your objects are aware of every "container" that might hold them. This does not scale, and it certainly doesn't work for reusing data structures.
- Evbn 14y agoIt scales in the sense that all types are extensible: you can make A implement B by adding the appropriate definitions anywhere, not just in the file that defines B. Rubyists call this monkey patching and they love it (but Ruby monkey patching can do wackier things beyond adding new methods)
- quatrevingts 14y agoBut I can only make A implement B in the file that defines A, at least according to the comments here: https://news.ycombinator.com/item?id=5443344 https://news.ycombinator.com/item?id=5443344
- AndrewDucker 14y agoSo every type that can be returned from a service call has to implement Reply? That's acres of template code being duplicated all over the place - and if I need to fix a defect in it I need to change it in every place! That strikes me as terribly unmaintainable.
- grey-area 14y agoSo every type that can be returned from a service call has to implement Reply? Yes, if you want it to actually be a Reply, it has to implement Reply. That's acres of template code being duplicated all over the place No, if you need to reuse code you can use other techniques like embedding (not shown in examples). The features and restrictions differ from many other OO languages but I think the creators of Go deserve a little more credit than you are giving them - they do not produce unmaintainable code (see std lib for Go), worked on a large scale with C++ OOP previously, designed the forking Unix operating system, and are not unaware of the ramifications of the decisions taken.
- ansible 14y agoWell, you can implement methods based on the Reply interface instead. As long as there are common fields or methods that all the types have, you can have a single CheckStatus() that uses those. Maybe I don't know what exactly you want. The Foo and Bar in my example have quite different CheckStatus() methods because those two structs are quite different. If there were more similar, then you could share more code.