I do not have a long list of disadvantages for you; in fact, I have only two.
Adding parameters detracts from the UX—This is a rather big one. Adding parameters to a method or function detracts from the UX of the function. As we saw in Chapter 3, Coding for User Experience, a bad UX for a function can negatively impact its usability.
Consider the following struct:
// Load people from the database
type PersonLoader struct {
}
func (d *PersonLoader) Load(db *sql.DB, ID int) (*Person, error) {
return nil, errors.New("not implemented")
}
func (d *PersonLoader) LoadAll(db *sql.DB) ([]*Person, error) {
return nil, errors.New("not implemented")
}
This code works; it gets the job done. But it's annoying to have to pass in the database every time. Beyond that, there is no guarantee that the code that calls Load() also...