Golang中case语句的算术表达式问题探讨
Golang中case语句的算术表达式问题探讨 我想使用case语句而不是switch进行算术比较。能否告诉我以下代码有什么问题?
package main
import "fmt"
func main(){
a := 2
switch a {
case a < 5 :
fmt.Println("value is less than 5")
}
}
更多关于Golang中case语句的算术表达式问题探讨的实战教程也可以访问 https://www.itying.com/category-94-b0.html
只有当对值进行切换而不是对表达式进行切换时,switch语句才会更快。
更多关于Golang中case语句的算术表达式问题探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
不过请注意,这仅仅是嵌套 if/else 语句的语法糖,表达式会按给定顺序依次求值和比较,编译器无法将其优化为跳转表。
// 代码示例保留原文
我在这里找到了问题的答案
https://www.dotnetperls.com/switch-go
所以我的代码变成了:
package main
import "fmt"
func main(){
a := 2
switch {
case a < 5 :
fmt.Println("value is 2")
}
}
这样可以正常工作
不能对表达式进行 switch 操作,只能对常量进行。而且不能对整数进行 switch(参见 https://tour.golang.org/flowcontrol/9)
可以这样做:
package main
import "fmt"
func main() {
a := 2
if a < 5 {
fmt.Println("value is less than 5")
}
}
有趣,你能提供一些支持这个观点的链接吗?
我之前从未听说过跳转表,但刚刚在网上查阅了一下,他们说由于跳转表的存在,switch语句相对比if/else更快。

switch vs if else - GeeksforGeeks
先决条件 - Switch语句,决策制定(if else)
switch语句通常比一组嵌套的if语句更高效。决定是否使用if-then-else… 阅读更多 »
这段代码的问题在于Go语言的switch语句语法使用不正确。在Go中,switch语句有两种主要用法:
- 表达式switch - 比较case表达式与switch表达式的值
- 类型switch - 进行类型断言
你的代码试图在case中使用布尔表达式,但语法不正确。以下是修正后的几种写法:
方法1:使用带条件的case语句(推荐)
package main
import "fmt"
func main() {
a := 2
switch {
case a < 5:
fmt.Println("value is less than 5")
case a == 5:
fmt.Println("value is equal to 5")
case a > 5:
fmt.Println("value is greater than 5")
}
}
方法2:使用if-else语句
package main
import "fmt"
func main() {
a := 2
if a < 5 {
fmt.Println("value is less than 5")
} else if a == 5 {
fmt.Println("value is equal to 5")
} else {
fmt.Println("value is greater than 5")
}
}
方法3:使用带表达式的switch(当比较固定值时)
package main
import "fmt"
func main() {
a := 2
switch a {
case 1, 2, 3, 4:
fmt.Println("value is less than 5")
case 5:
fmt.Println("value is equal to 5")
default:
fmt.Println("value is greater than 5")
}
}
关键问题分析:
- 当
switch后面有变量时,case语句中应该是具体的值,而不是布尔表达式 - 要在case中使用布尔表达式,需要省略
switch后面的变量,使用switch {的形式 case a < 5:这种语法在Go中是不合法的
第一种方法是最符合你需求的解决方案。

