I tried to break down the thought process on this exact question earlier this year and gave a presentation at my local Go meetup. My slides are here: http://go-talks.appspot.com/github.com/ChrisHines/talks/non-orthogonal-choices-in-go/non-orthogonal-choices-in-go.slide <http://go-talks.appspot.com/github.com/ChrisHines/talks/non-orthogonal-choices-in-go/non-orthogonal-choices-in-go.slide>
TL;DR Informed choices for dynamic behavior 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 Hope it helps. Chris On Sunday, November 20, 2016 at 12:22:57 AM UTC-5, Henry wrote: > > Hi, > > I am wondering from best practice point of view whether it is better to > use interface or first-class function, especially considering that Go > encourages the use of small interfaces. Here is an example: > > type SomethingDoer interface{ > DoSomething(data Data) > } > > func PerformWork(doer SomethingDoer){ > //... > } > > Or > > type SomethingDoer func(Data) > > func PerformWork(doer SomethingDoer){ > //... > } > > Is there some sort of a guideline when to use one vs the other? They seem > like redundant features to me. > > Thanks > > Henry > > -- 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+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.