Ir idioma - caso de cambio | juzgar múltiples valores en el cambio, conversión de interfaz: la interfaz {} es float64, no int

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 manualmente xxx.(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á.

Supongo que te gusta

Origin blog.csdn.net/inthat/article/details/127308743
Recomendado
Clasificación