Práticas recomendadas para utilizar uma função comum entre estruturas com campos idênticos
Em cenários onde duas estruturas possuem campos idênticos, é desejável evitar duplicação de código ao definir métodos que operam nesses campos.
Tipo personalizado como receptor de método
A abordagem recomendada é introduzir um tipo personalizado (por exemplo, Versão) que sirva como receptor do método. Como todos os tipos personalizados podem ser utilizados como receptores de métodos, esta técnica permite a criação de um único método que pode ser aplicado a múltiplas estruturas.
Composição
Uma vez personalizado type é definido, ele pode ser incorporado nas estruturas usando composição. Isso envolve incorporar o tipo personalizado nas estruturas, essencialmente criando uma estrutura aninhada.
Exemplo
Considere o seguinte snippet de código:
type Version string
func (v Version) PrintVersion() {
fmt.Println("Version is", v)
}
type Game struct {
Name string
MultiplayerSupport bool
Genre string
Version
}
type ERP struct {
Name string
MRPSupport bool
SupportedDatabases []string
Version
}
Aqui, o tipo Version serve como receptor do método, e seu método PrintVersion pode ser acessado pelas estruturas Game e ERP devido aos seus campos Version incorporados.
Uso
O campo Versão incorporado pode ser usado e modificado como qualquer outro campo:
main() {
g := Game{
"Fear Effect",
false,
"Action-Adventure",
"1.0.0",
}
g.PrintVersion() // Version is 1.0.0
e := ERP{
"Logo",
true,
[]string{"ms-sql"},
"2.0.0",
}
e.PrintVersion() // Version is 2.0.0
}
Ao empregar essa abordagem, a repetição de código associada a métodos duplicados é eliminada, mantendo a flexibilidade e a segurança de tipo.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3