"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 > ¿Cuándo utilizar argumentos de sector restringidos a tipos de sector frente a argumentos de sector genéricos en Go?

¿Cuándo utilizar argumentos de sector restringidos a tipos de sector frente a argumentos de sector genéricos en Go?

Publicado el 2024-11-09
Navegar:171

When to Use Slice Arguments Constrained to Slice Types vs. Generic Slice Arguments in Go?

Argumentos de sectores genéricos: comprensión de la distinción

En Go, la programación genérica introduce parámetros de tipo que permiten que las funciones operen en diferentes tipos. Un área de interés es la distinción entre argumentos de sector restringidos a tipos de sector y argumentos de sector genéricos.

Argumento de sector restringido a tipos de sector

Considere la función sectores.Grow con el primer argumento restringido por ~[]E. Esto significa que el tipo de este argumento debe ser un tipo de segmento con un tipo de elemento de E.

Argumento de segmento genérico

Por el contrario, considere la función slices.Contains con el primer argumento simplemente escrito como []E. Esto permite cualquier tipo de segmento con un tipo de elemento E.

Diferencias prácticas

Al principio, puede parecer que estos dos tipos de argumentos de segmento se comportan de manera similar, ya que Ambos permiten que las funciones accedan a operaciones de corte como agregar y rango. Sin embargo, existe una diferencia sutil pero importante cuando se trata de devolver un segmento.

Devolver un segmento

Si la función requiere devolver un segmento del mismo tipo que el segmento de entrada, debe utilizar un argumento de segmento restringido a los tipos de segmento (~[]E). Esto garantiza que el segmento devuelto tenga el tipo subyacente correcto.

Ejemplo

Comparemos dos implementaciones de Grow(): una usando ~[]E y la otra usando [ ]E.

func Grow[S ~[]E, E any](s S, n int) S {
    // ...
}

func Grow2[E any](s []E, n int) []E {
    // ...
}

Si pasamos una porción de un tipo personalizado (por ejemplo, []MyInt), Grow() puede devolver un valor de ese mismo tipo. Sin embargo, Grow2() solo puede devolver un tipo de segmento genérico ([]E).

Conclusión

En resumen, si necesita devolver un segmento del mismo type como segmento de entrada, debe utilizar un argumento de segmento restringido a tipos de segmento (~[]E). De lo contrario, usar un argumento de segmento genérico es suficiente.

Declaración de liberación Este artículo se reimprime en: 1729666579 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Ú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