Go语言switch case使用比较表达式出现类型错误该如何解决
报错原因
你使用的是Go语言带判断变量的switch语法,该语法要求所有case后的值必须和switch后跟随的变量类型完全匹配。你switch后接的是int类型的rating,但case后写的rating >= 2100是布尔类型的判断表达式,两者类型不匹配,因此编译器抛出类型转换错误。
修复方案
改用Go支持的无判断表达式的switch写法即可,该写法的case分支支持直接写布尔判断逻辑,效果和预期的if-else判断链完全一致,修复后的完整代码如下:
package main import ( "fmt" "os" "reflect" "strconv" ) func main() { rating, err := strconv.Atoi(os.Args[1]) // 新增输入校验,避免用户输入非整数时程序出现异常 if err != nil { fmt.Println("请输入有效的整数等级值") return } fmt.Println(reflect.TypeOf(rating)) // 移除switch后的rating变量,改为无表达式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") default: fmt.Println("newbie") } }
额外说明:如果不需要强制使用switch语法,也可以直接用多层if-else实现相同逻辑,两种写法的执行效率没有区别。
内容的提问来源于stack exchange,提问作者Rahul Sharma
相关产品推荐
相关产品推荐

