Directorio de artículos
- Ir idioma - cambiar mayúsculas y minúsculas
-
- antecedentes
- caso de interruptor
- Notas sobre la instrucción switch en lenguaje go
Ir idioma - cambiar mayúsculas y minúsculas
antecedentes
Cuando hay pocos ifs anidados (dentro de tres), escribir programas con ifs es más conciso. Sin embargo, cuando hay muchas ramas seleccionadas, habrá muchos niveles de instrucciones if anidadas, lo que dará como resultado un programa detallado y una legibilidad reducida. Por lo tanto, la instrucción switch se usa para manejar la selección de varias ramas.
El lenguaje Golang también tiene los tres mosqueteros de if, switch, y para eso tienen otros lenguajes en cuanto a control de procesos. Entre ellos, el uso de if y for es básicamente el mismo. El uso del interruptor es bastante diferente.
- La mayor diferencia entre switch y otros lenguajes es que no hay declaración de ruptura, y cada caso tiene una declaración de ruptura por defecto.
- Un uso especial del interruptor en Golang - fallthrough. La función de la declaración fallthrough es forzar la ejecución del código de caso no ejecutado después de que el caso
caso de interruptor
Un interruptor es una declaración condicional que hace coincidir el resultado de la evaluación de una expresión con una lista de valores posibles y ejecuta el código apropiado según la coincidencia. Piense en la declaración de cambio como una alternativa a escribir varias cláusulas if-else. En comparación con otros lenguajes como C y Java, la estructura de cambio en el lenguaje Go es más flexible de usar.
switch var1 {
//前花括号 { 必须和 switch 关键字在同一行。
case val1:
...
case val2:
...
default:
...
}
Cada rama del caso
del caso es única y se prueba una por una de arriba a abajo hasta que coincida. (El lenguaje Go usa un algoritmo de búsqueda rápida para probar la coincidencia de la condición de cambio con la rama del caso hasta que el algoritmo coincida con un caso o ingrese la condición predeterminada). Una vez que una rama se empareja con éxito, se saldrá de todo el bloque de código de interruptor después de ejecutar el código correspondiente, es decir, no hay necesidad de usar la instrucción break para indicar el final. Por lo tanto, el programa no ejecuta automáticamente el código de la siguiente rama.
Después de una declaración de caso, no se requieren llaves para encerrar declaraciones de varias líneas. Cuando el bloque de código es solo una línea, se puede colocar directamente después de la declaración del caso. Puede usar la declaración de devolución para finalizar prematuramente la ejecución de un bloque de código.
default
La rama predeterminada opcional puede aparecer en cualquier orden, pero es mejor ponerla al final. Actúa como el else en una sentencia if-else, indicando que la sentencia asociada se ejecuta si no se cumple alguna de las condiciones dadas.
fallthrough
Si desea continuar ejecutando el código de las ramas subsiguientes después de ejecutar el código de cada rama, puede usar la palabra clave fallthrough para lograr el propósito.
Uso especial del interruptor en Golang - fallthrough
switch se ejecuta desde el primer caso cuya expresión de juicio es verdadera. Si el caso falla, el programa continuará ejecutando el siguiente caso y no juzgará si la expresión del siguiente caso es verdadera.
package main
import "fmt"
func main() {
num := 2
switch num{
case 1:
fmt.Println("num的数值是1")
case 2:
fmt.Println("num的数值是2")
fallthrough
case 3:
fmt.Println("num的数值是3")
case 4,5,6:
fmt.Println("num的数值可能是4,5,6")
default:
fmt.Println("执行default语句")
}
fmt.Println("程序结束了")
}
Juzgando múltiples valores en el cambio de idioma go
La declaración de cambio en el lenguaje go puede determinar fácilmente la situación de múltiples valores.
La declaración de cambio de idioma go puede coincidir con varias condiciones al mismo tiempo, separadas por comas, y una de ellas puede coincidir con éxito
package main
import "fmt"
func judge(v int) {
switch v {
case 1, 3:
{
fmt.Println("v的值为", v)
}
default:
{
fmt.Println("未匹配到,v的值为", v)
}
}
}
func main() {
a := 1
judge(a)
a = 2
judge(a)
a = 3
judge(a)
}
Resultado de la ejecución del código:
El valor de num es 2
El valor de num es 3 El
programa finaliza
A través del código, podemos saber que Fallthrough solo actúa en el caso actual y solo ejecuta un caso más hacia abajo, en lugar de ejecutar la declaración de cambio completa.
Cambio de tipo, para determinar el tipo de variable realmente almacenada en una variable de interfaz
La instrucción switch también se puede usar en type-switch para determinar qué tipo de variable se almacena realmente en una variable de interfaz.
La sintaxis de Type Switch es la siguiente:
switch x.(type){
case type:
statement(s);
case type:
statement(s);
/* 你可以定义任意个数的case */
default: /* 可选 */
statement(s);
}
El resultado de ejecutar el código anterior es:
Tipo de x:
Qué tipos de datos son compatibles con golang switch
Java admite
1. El tipo de datos después de la expresión de cambio solo admite byte, corto, tipo entero int, tipo de carácter char, tipo de enumeración y tipo java.lang.String.
2. Nota: Se admite la clase contenedora de byte, short e int, porque se desempaquetará automáticamente.
Switch in Go
es compatible con cualquier tipo
flotador de prueba64
package main
import "fmt"
func main() {
var num float64
num = 1.0
switch num {
case 1:
fmt.Println("num的数值是1")
case 2:
fmt.Println("num的数值是2")
fallthrough
case 3:
fmt.Println("num的数值是3")
case 4, 5, 6:
fmt.Println("num的数值可能是4,5,6")
default:
fmt.Println("执行default语句")
}
fmt.Println("程序结束了")
}
Tengo un problema en el trabajo, conversión de interfaz: la interfaz {} es float64, no int
Descripción del problema:
Encontré un trabajo, uso map[string]interface{} json para asignar al mapa, obtener una variable y el registro imprime 1, pero el caso del cambio es 1 y la vida y la muerte no pueden coincidir .
Primera depuración, descubrí que mis datos son de tipo float64, pero el cambio para escribir demo float64 go también debería ser compatible. Para ser más seguro, el caso general usa números enteros, por lo que considero convertir primero a int. El resultado es un error: conversión de interfaz: la interfaz {} es float64, no int
Análisis del problema:
el tipo de interfaz interface {} no se puede convertir directamente al tipo entero int. interface {} El tipo de interfaz es float 64. Si desea obtener un valor entero int, primero debe convertirlo en float.
Nota: No solo mire la impresión. Verá que el resultado de la impresión es 1 pero no coincide
case 1:
. Antes de usar la interfaz{}, debe girarla manualmentexxx.(float64)
. La impresión se puede escribir porque go hace este trabajo internamente al imprimir.
Otras referencias
Solución: conversión de interfaz: la interfaz {} es float64, no int
URL de referencia: https://developer.aliyun.com/article/850297
Notas sobre la instrucción switch en lenguaje go
Por defecto, cambiar en marcha es equivalente a tener un descanso al final de cada caso. Después de una coincidencia exitosa, otros casos no se ejecutarán automáticamente hacia abajo, sino que todo el cambio se saltará.