function as an interface
“An interface type is defined as a set of method signatures.”
Taking a simple example:
golang nameing convention is interfaces that end in
er, Reader, Writer, Closer etc..
In this example, the interface
Fooer defines a single method
Foo, any struct with a method
Foo will implement this interface, (implementation is done implicitly).
But it’s not just structs that can implement interfaces, if an interface has a single method, then you can implement it with a function type.
But why? If you define your more complex behaviours and interfaces by embedding smaller interfaces with smaller method sets, then creating the implementations of those interfaces becomes significantly easier. You can now mock or implemet behaviours with an anonymous function instead of a mock or no op struct.
Here the type
bFoo implemets the interface
Fooer and any anonymous function that has the same method signature as
Fooer can be cast to
bFoo and it too will implement the
This means less code and cleaner code as once you have the type
bFoo any function can implement
Fooer without the need for a struct for it to be a method upon.
Runnable example: https://play.golang.org/p/bVp8Lljxkj
Now if you have a complex struct like:
You can implement the
foo Fooer field with just an anonymous function.