"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como podemos restringir efetivamente os tipos indexáveis ​​nos genéricos do Go 1.18?

Como podemos restringir efetivamente os tipos indexáveis ​​nos genéricos do Go 1.18?

Publicado em 19/11/2024
Navegar:640

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

Restrições de indexação no Go 1.18 Genéricos

Com a introdução de genéricos no Go 1.18, os desenvolvedores têm a oportunidade de implementar algoritmos que funcionam com específicos tipos. Um requisito comum é usar tipos que suportam indexação, como matrizes, fatias, mapas e strings.

Restrição indexável

Para restringir um parâmetro de tipo a tipos indexáveis , considere usar a seguinte restrição com uma união:

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

Limitações da restrição indexável

Embora a restrição acima funcione para indexação de bytes e strings, há limitações para usá-la com outros tipos indexáveis, como mapas e matrizes :

  • Mapas: A união deve conter apenas tipos de mapas com chaves e tipos de elementos idênticos. Essa restrição torna impraticável algoritmos genéricos que devem lidar com mapas com chaves e valores diferentes.
  • Arrays: O comprimento de um array faz parte de seu tipo, portanto, uma união precisaria especificar todos os comprimentos possíveis. Isso pode ser complicado e propenso a erros fora dos limites.

Abordagem Alternativa

Devido a essas limitações, a única união prática que suporta a indexação é []byte | corda. Esta união permite operações de indexação, mas não oferece suporte a operações de intervalo porque não possui um tipo de núcleo.

Exemplo de uso

O exemplo a seguir demonstra como usar a restrição indexável:

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

Esta função pega um valor indexável e um índice e retorna o byte no índice especificado.

Conclusão

While Go 1.18 fornece uma maneira para restringir tipos a tipos indexáveis ​​usando uma união, as limitações dessa restrição significam que ela só é prática para um conjunto limitado de casos de uso, ou seja, indexação de bytes e strings.

Tutorial mais recente Mais>

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