Go · Avançado · Inglês · Informal
accept interfaces, return structs
Provérbio de design: parâmetros de função devem ser interfaces pequenas, para flexibilidade, e os retornos devem ser tipos concretos, para não esconder campos e métodos úteis.
Onde usar
Sai em code review quando alguém devolve uma interface de um construtor. Retornar o tipo concreto dá mais liberdade ao chamador, que define a interface de que precisa.
Em código
func Copia(w io.Writer, r io.Reader) error {
_, err := io.Copy(w, r)
return err
}
func NewBuffer() *bytes.Buffer { // concreto
return &bytes.Buffer{}
}Exemplos
Remember the rule: accept interfaces, return structs.
Lembre da regra: aceite interfaces, devolva structs.
The constructor returns an interface, which breaks accept interfaces, return structs.
O construtor devolve uma interface, o que quebra o accept interfaces, return structs.
Cuidado
É uma heurística, não regra absoluta: devolver error ou io.Reader, por exemplo, é correto e esperado.
Sinônimos
Go proverb de interfaces