This email follows my email yesterday "cannot convert fs.FS zip file to io.ReadSeeker (missing Seek)". Thanks very much to those who replied and provided solutions.
Following that, I'm interested to learn how people negotiate interface interchangeability in their programmes as my query above showed a basic misunderstanding of how that operates and how to approach the topic in general.
At a basic level my assumption that an fs.File would be "file like" and therefore act like a file was upended by the need for a PDF importer library to require an *io.ReadSeeker. This assumption broke for an fs.File from a zip archive since that doesn't support seeking. That is logical but was hard to find out. Although I can easily jump to methods and see related docs using vim-go, I still find interface interpolation (if that is a reasonable term) difficult to understand.
At a more abstract level, the concept of interfaces was a key attraction to me of go, next to goroutines. They not only promise loose coupling of independently developed pieces, but also allow functionality to be easily re-used through types sharing method signatures, not to mention interface embedding. But, perhaps because of my background in python and SQL, I find this abstraction tricky to grasp. It's difficult to know, offhand, what interfaces are best to implement in a particular case. That difficulty is compounded when one interface can be interpolated (in some cases only, depending on the underlying concrete type) to another interface. The set of possible interface "contracts" offered to an fs.File, for example, could approach a very large number (ignoring interface{}) depending on the underlying concrete type.
The https://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go article (pointed to by "Go by Example") by Jordan Orelli uses the example of "...the Animal type will be an interface, and we’ll define an Animal as being anything that can speak". He writes:
We start by defining our Animal interface:
type Animal interface {
Speak() string
}
I suppose my question is (and forgive me if this is a terrifically naive), how can one negotiate the go landscape of commonly used modules to re-utilise, where possible, a more commonly named interface implementing "Speak()" or convertible to provide "Speak()"?
Finally I was surprised that I did not get a compile-time error when trying to convert an fs.File to a io.ReadSeeker for the (possible) case when an underlying concrete type did not support Seek.
Many thanks,
Rory
--
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/YyzhV8S8WgH7mrJK%40campbell-lange.net.
100% true. The difficulty when examining a “large” system is that it becomes very difficult to understand the relationships. Documentation can help but it is not a great substitute for automated tools.
In Java - actually all of OO - type casting is severely frowned upon - but it seems a lot of Go code does it liberally.
If I designed a language today I would prohibit any type casts. It is a huge problem and points to insufficient design skills.
> On Sep 22, 2022, at 6:57 PM, Ian Davis <m...@iandavis.com> wrote:
>
> On Thu, 22 Sep 2022, at 11:27 PM, Rory Campbell-Lange wrote:
>
> I just wanted to respond to this part:
>
>> I suppose my question is (and forgive me if this is a terrifically
>> naive), how can one negotiate the go landscape of commonly used modules
>> to re-utilise, where possible, a more commonly named interface
>> implementing "Speak()" or convertible to provide "Speak()"?
>>
>
> Generally, when writing Go, the consumer of the object defines the interface it requires. So rather than you looking for interfaces that might exist in the wild, it's better to focus on your application and its needs. If you have a component that uses the Speak method on objects then define that as an interface that your component can accept. Any other user of your component can see that interface is needed and provide a suitable object that implements it or create a shim to adapt one.
>
>
> --
> 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/1fb8a3c4-b135-4ab1-b969-d6f4c239b7d9%40www.fastmail.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/C0D7D21F-AC72-40E3-9DB9-A8678886CDF3%40ix.netcom.com.
On Sep 22, 2022, at 7:24 PM, burak serdar <bse...@computer.org> wrote:
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAMV2RqooGmOaXCGmriJ%2BDryYSSLNRmcrc9hfSTcWG-qPGAonxw%40mail.gmail.com.
I would like to understand the reason to type assert but not cast? That is an OO design flaw.
On Sep 22, 2022, at 7:58 PM, burak serdar <bse...@computer.org> wrote:
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAMV2RqrouRZrUMPxwu16xCjS_L_0SQYgS8AaWJKEZ6JWwpFGUg%40mail.gmail.com.
On Sep 22, 2022, at 8:01 PM, Robert Engels <ren...@ix.netcom.com> wrote:
On Sep 22, 2022, at 8:01 PM, Robert Engels <ren...@ix.netcom.com> wrote:
Exactly. The world figured out long ago that OO and it’s principles are a better way to go. The fact that Go is not OO doesn’t make it bad or not useful - but the proponents of that state doesn’t make it better.
On Sep 22, 2022, at 9:50 PM, Kurtis Rader <kra...@skepticism.us> wrote:
--
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/CABx2%3DD_ns3oWgSo%3DD%2BmyjyE4jrb%3D%2ByVut1EopSho1MZsJ7%2BPBw%40mail.gmail.com.