"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 podemos restringir eficazmente los tipos indexables en los genéricos Go 1.18?

¿Cómo podemos restringir eficazmente los tipos indexables en los genéricos Go 1.18?

Publicado el 2024-11-19
Navegar:573

How Can We Effectively Constrain Indexable Types in Go 1.18 Generics?

Restricciones de indexación en Go 1.18 Genéricos

Con la introducción de genéricos en Go 1.18, los desarrolladores tienen la oportunidad de implementar algoritmos que funcionan con tipos. Un requisito común es utilizar tipos que admitan la indexación, como matrices, sectores, mapas y cadenas.

Restricción indexable

Para restringir un parámetro de tipo a tipos indexables , considere usar la siguiente restricción con una unión:

type Indexable interface {
    ~[]byte | ~string
}

Limitaciones de la restricción indexable

Si bien la restricción anterior funciona para indexar bytes y cadenas, existen limitaciones para usarla con otros tipos indexables, como mapas y matrices. :

  • Mapas: La unión debe contener solo tipos de mapas con claves y tipos de elementos idénticos. Esta restricción la hace poco práctica para algoritmos genéricos que deben manejar mapas con diferentes claves y valores.
  • Arrays: La longitud de una matriz es parte de su tipo, por lo que una unión necesitaría especificar todas las longitudes posibles. Esto puede ser engorroso y propenso a errores fuera de límites.

Enfoque alternativo

Debido a estas limitaciones, la única unión práctica que admite la indexación es []byte | cadena. Esta unión permite operaciones de indexación, pero no admite operaciones de rango porque carece de un tipo principal.

Ejemplo de uso

El siguiente ejemplo demuestra cómo utilizar la restricción indexable:

func GetAt[T Indexable](v T, i int) byte {
    return v[i]
}

Esta función toma un valor indexable y un índice y devuelve el byte en el índice especificado.

Conclusión

Si bien Go 1.18 proporciona una manera Para restringir tipos a tipos indexables usando una unión, las limitaciones de esa restricción significan que solo es práctica para un conjunto limitado de casos de uso, a saber, indexación de bytes y cadenas.

Ú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