diff --git a/interfaces/notes.md b/interfaces/notes.md deleted file mode 100644 index 87f6a13..0000000 --- a/interfaces/notes.md +++ /dev/null @@ -1,36 +0,0 @@ -# Func Values - -+ Please feel free to put any function that match this signature here and it will be called each time my function is called. - -+ They are extremely useful when wanting to declare a block of code that you want to pass around. - -+ They allow functions to be passed as parameters. - -+ They can be chained together - -# Interfaces vs Func Values - -+ Use interfaces when a method needs to belong to an object (that needs to operate on the value of a type: io.Reader, sort.Interface, etc). - -+ Use func values when a function doesn't need to belong to an object. For simple, not-data oriented jobs: Filtering, splitting, mapping etc. - -+ An implementation of the interface means that the behaviour is intrinsic to the implementing object. The behaviour does not change based on the caller or the circumstances of the call. - - + The func value is saying that the operation is not intrinsic to the object but based on context or the caller to define. - -+ An interface is a language feature representing some contract: "I hereby guarantee I make the following methods available". - -+ The benefit of using interfaces is that you give the type a name (you would get that with records too) and you are more clearly expressing your intention (other components can implement the interface). - -+ Use interface values when: - + Well known interfaces already exist, e.g. io.Reader - + More than one behavior required - + Typically stateful - + Implementations non-trivial - - + Use function values when: - + Only one behavior - + Typically stateless - + In-line implementations typical - - + http://go-talks.appspot.com/github.com/ChrisHines/talks/non-orthogonal-choices-in-go/non-orthogonal-choices-in-go.slide#1 \ No newline at end of file