当switch case出现错误时,如何使switch语句工作?



根据用户从命令行输入,切换情况返回整数的评级。由于命令行参数是字符串类型,我首先将其转换为int,然后在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")
}
}

现在评级>= 2100有错误,而不是所有比较。内容如下:

cannot convert rating >= 2100 (untyped bool value) to intcompilerInvalidUntypedConversion

无法理解如何解决此问题。

请帮忙!

如果您使用switch表达式,则必须在它们具有可比性的地方使用case表达式。Spec: Switch语句:

对于每一个(可能转换的)大小写表达式x和开关表达式的值t,x == t必须是一个有效的比较。

也就是说,如果你使用switch rating { ... },那么你只需要指定整数值,例如2100,而不需要像rating >= 2100这样的比较。

显然你不想要单个值,而是要范围,所以省略switch表达式:

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")
}

你基本上是在重复上面已经存在的变量名在这里输入图像描述

最新更新