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

6 回复

只有当对值进行切换而不是对表达式进行切换时,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语句有两种主要用法:

  1. 表达式switch - 比较case表达式与switch表达式的值
  2. 类型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中是不合法的

第一种方法是最符合你需求的解决方案。

回到顶部