November 2017
Intermediate to advanced
670 pages
17h 35m
English
As mentioned in the previous chapter, this is known as Duck Typing. It's a powerful design pattern. A thing is defined not by its type hierarchy but by its behaviors.
Here's an example of a File interface from the github.com/couchbase/moss package:
// The File interface is implemented by os.File. App specific// implementations may add concurrency, caching, stats, fuzzing, etc.type File interface { io.ReaderAt io.WriterAt io.Closer Stat() (os.FileInfo, error) Sync() error Truncate(size int64) error}
Here's another example of it from Go's mime/multipart project:
// File is an interface to access the file part of a multipart message.// Its contents may be either stored in memory or on disk.type File interface { io.Reader ...