Fallthrough na troca de tipo: uma explicação detalhada
A troca de tipo no Go permite o tratamento eficiente de valores com base em seus tipos concretos. No entanto, ao contrário das instruções switch-case padrão, o fallthrough é explicitamente proibido no tipo switch. Essa escolha de design levanta questões sobre sua lógica.
Compreendendo os motivos
A especificação Go afirma que "fallthrough" não é permitido em opções de tipo. Essa proibição decorre de vários fatores:
Para ilustrar o problema, considere o seguinte código:switch i := x.(type) { caso interno: fmt.Printf("%T\n", i) // imprime "int" caso booleano: fmt.Printf("%T\n", i) // imprime "bool" queda sequência de casos: fmt.Printf("%T\n", eu) }
Se fallthrough fosse permitido, não está claro que tipo seria impresso para o caso da string. Seria ambíguo se eu deveria permanecer um booleano ou me tornar uma interface{} contendo um booleano e uma string.
switch i := x.(type) { case int: fmt.Printf("%T\n", i) // prints "int" case bool: fmt.Printf("%T\n", i) // prints "bool" fallthrough case string: fmt.Printf("%T\n", i) }Soluções Alternativas
Embora o fallthrough não seja permitido em type switches, existem maneiras alternativas de obter um comportamento semelhante:switch i := x.(type) { caso bool, string: se b, ok := i.(bool); OK { // b é um booleano } // i é uma interface{} que contém um bool ou uma string }
Essa abordagem permite um tratamento mais específico de diferentes tipos sem introduzir incompatibilidades ou ambiguidade de tipo.
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