"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 > Por que não posso usar interfaces com restrições de tipo diretamente no Go?

Por que não posso usar interfaces com restrições de tipo diretamente no Go?

Publicado em 19/11/2024
Navegar:288

Why Can't I Use Interfaces with Type Constraints Directly in Go?

Restrições de tipo de interface

Ao desenvolver um aplicativo Go, é essencial compreender as limitações impostas pelas restrições de tipo de interface. Tipos de interface com elementos de tipo, como uniões, têm uso restrito. Este artigo investiga as especificidades das restrições de tipo de interface e fornece exemplos para ilustrar seu impacto.

Definindo interfaces com restrições de tipo

Em Go, interfaces que contêm elementos de tipo, como uniões, são consideradas não básico. Isso significa que eles não podem ser usados ​​como tipos de variáveis ​​ou ser componentes de outros tipos que não sejam de interface. Por exemplo, a interface Number a seguir não é básica, pois contém uma união:

type Number interface {
    int | int64 | float64
}

O erro: "interface contém restrições de tipo"

Ao tentar inicializar uma fatia da interface Number como esta:

a := []Number{Number(1), Number(2), Number(3), Number(4)}

Go gera o erro "interface contém restrições de tipo" porque a interface Number não pode ser usada na conversão de tipo (como visto em Number(1)).

Compreendendo as restrições de tipo

De acordo com a especificação da linguagem Go, interfaces que não são básicas só podem ser usadas como restrições de tipo ou como elementos de outras interfaces usados ​​como restrições. Eles não podem ser os tipos de valores ou variáveis. Isso ocorre porque a presença de elementos de tipo em uma interface a torna não básica e incompatível com a instanciação direta.

Exemplo: uso de interfaces não básicas

Embora interfaces não básicas não possam ser usadas diretamente como tipos, eles podem ser empregados como restrições de tipo. Por exemplo, considere a seguinte estrutura Coordenadas que usa um parâmetro de tipo genérico T restrito pela interface Número:

type Coordinates[T Number] struct {
    x, y T
}

Neste cenário, a estrutura Coordens só pode ser instanciada com tipos que atendam às restrições de interface Number.

Conclusão

Os tipos de interface com restrições de tipo desempenham um papel crucial na garantindo segurança de tipo em aplicativos Go. Ao compreender as limitações das interfaces não básicas e utilizá-las corretamente dentro das restrições de tipo, os desenvolvedores podem criar código robusto e eficiente.

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