> 1. there are a lot of similar functions, for example NewBook and NewAuthor. 
> The difference is type of argument passed into the function. Is it a good 
> idea to combine those 2 functions with a generic New(interface{}) (string, 
> error) function and  reflect the actual type inside? 

I would not recommend to do this. Eventually logic of insertion may
become much different and your generic function's code will become a
very hard to read. Also, there is a little bit overhead on using
interfaces for non-pointer structs like `Book` and so on.


> 2. Sometimes we query based on one or more conditions (where clause),  for 
> example find books based on author/release data/ price.  Should I create a 
> generic function like:
> func FindBooks(map[string]interface{}) ([]Book, error)

It can be done in this way, but I could suggest to use some struct
`BookCriteria` with non-interface fields, say `Author string` and so on.
Then, your `FindBooks` implementation may accept that struct instance.  

Or, for example, `FindBooks` may accept variadic functional options that
can fill appropriate fields of criteria. For more about functional
options you could find in Dave Cheney's article:

https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis

-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to