Fallo en el cambio de tipo: una explicación detallada
El cambio de tipo en Go permite un manejo eficiente de los valores en función de sus tipos concretos. Sin embargo, a diferencia de las declaraciones de cambio de caso estándar, la falla no se permite explícitamente en el cambio de tipo. Esta elección de diseño plantea dudas sobre su justificación.
Comprender las razones
La especificación Go establece que el "fallthrough" no está permitido en los interruptores de tipo. Esta prohibición se debe a varios factores:
Un ejemplo para aclarar
Para ilustrar el problema, considere el siguiente código:
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) }
Si se permitiera la transferencia alternativa, no está claro qué tipo se imprimiría para el caso de cadena. Sería ambiguo si debo seguir siendo booleano o convertirme en una interfaz{} que contenga tanto un booleano como una cadena.
Soluciones alternativas
Aunque no se permite la solución alternativa modificadores de tipo, existen formas alternativas de lograr un comportamiento similar:
switch i := x.(type) { case bool, string: if b, ok := i.(bool); ok { // b is a bool } // i is an interface{} that contains either a bool or a string }
Este enfoque permite un manejo más específico de diferentes tipos sin introducir discrepancias de tipos o ambigüedad.
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