"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo evitar la duplicación de código al implementar métodos idénticos en estructuras con campos compartidos?

¿Cómo evitar la duplicación de código al implementar métodos idénticos en estructuras con campos compartidos?

Publicado el 2024-11-19
Navegar:374

How to Avoid Code Duplication When Implementing Identical Methods on Structs with Shared Fields?

Mejores prácticas para utilizar una función común en estructuras con campos idénticos

En escenarios donde dos estructuras poseen campos idénticos, es deseable evitar duplicación de código al definir métodos que operan en esos campos.

Tipo personalizado como receptor de método

El El enfoque recomendado es introducir un tipo personalizado (por ejemplo, Versión) que sirva como receptor del método. Dado que todos los tipos personalizados se pueden utilizar como receptores de métodos, esta técnica permite la creación de un único método que se puede aplicar a múltiples estructuras.

Composición

Una vez El tipo está definido, se puede incorporar a las estructuras mediante la composición. Esto implica incrustar el tipo personalizado dentro de las estructuras, esencialmente creando una estructura anidada.

Ejemplo

Considere el siguiente fragmento 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
}

Aquí, el tipo Versión sirve como receptor del método, y las estructuras Juego y ERP pueden acceder a su método PrintVersion debido a sus campos de Versión incrustados.

Uso

El campo Versión incrustado se puede utilizar y modificar como cualquier otro 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
}

Al emplear este enfoque, se elimina la repetición de código asociada con métodos duplicados mientras se mantiene la flexibilidad y la seguridad de tipos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3