en función de la entrada del usuario desde la línea de comandos, el cambio de mayúsculas y minúsculas devuelve la calificación de un número entero. Dado que los argumentos de la línea de comandos son de tipo cadena, primero los convierto a int y luego los uso en switch.
package main import ( "fmt" "os" "reflect" "strconv" ) func main() { rating, _ := strconv.Atoi(os.Args[1]) fmt.Println(reflect.TypeOf(rating)) switch rating { case rating >= 2100: fmt.Println("grand master") case rating >= 1900: fmt.Println("candidate master") case rating >= 1600: fmt.Println("expert") case rating >= 1400: fmt.Println("pupil") case rating < 1400: fmt.Println("newbie") } }Ahora hay un error en la calificación> = 2100, para todas las comparaciones. Va de la siguiente manera:
cannot convert rating >= 2100 (untyped bool value) to intcompilerInvalidUntypedConversionNo puedo entender cómo resolver esto.
¡Por favor ayuda!
Si usa una expresión de switch , debe usar expresiones de case donde sean comparables. Especificaciones: declaraciones de cambio:
Para cada expresión de caso (posiblemente convertida)
xy el valortde la expresión de cambio,x == tdebe ser una comparación válida.
Es decir, si usa switch rating { ... } , solo necesita especificar los valores enteros, por ejemplo, 2100 , y no una comparación como rating >= 2100 .
Obviamente, no desea valores únicos sino rangos, así que omita la expresión de cambio:
switch { case rating >= 2100: fmt.Println("grand master") case rating >= 1900: fmt.Println("candidate master") case rating >= 1600: fmt.Println("expert") case rating >= 1400: fmt.Println("pupil") case rating < 1400: fmt.Println("newbie") }