ExpertiDict

Go · Avançado · Inglês · Informal

accept interfaces, return structs

/əkˈsɛpt ˈɪn.tɚ.feɪ.sɪz ɹɪˈtɝn strʌkts/expressão

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

Veja também

Todos os termos de Go