如何在 Go 中使用 `switch` 语句
how to use a `switch` statement in Go
package main
import "fmt"
func main() {
var age int
fmt.Scanf("%d", &age)
// Code your switch or if...else-if statement here.
switch age {
case 1:
age <= 14
fmt.Println("Toy Story 4")
case 2:
age <= 18
fmt.Println("The Matrix")
case 3:
age <= 25
fmt.Println("John Wick")
case 4:
age <= 35
fmt.Println("Constantine")
case 5:
age > 35
fmt.Println("Speed")
default:
fmt.Println("Error: Unknown age")
}
}
我在 scanf
的 IDE 中得到一个黄色标记,标记未处理的错误。此外,所有案例的第一行都标记为红色,以防止编译。我得到的错误是 age <= 14 is evaluated, but not used
。所有的陈述都是一样的。我已经在网上搜索并查看了示例,据我所知,代码如材料和示例所述。这是 Go Land (JetBrains) 的屏幕截图:
有人有想法吗?另外,如果您回答,请记住,这是 Go 课程的一课,我必须使用 scanf。我可以将开关更改为 else if,这可能会解决问题,但我有点好奇,为什么会发生这种情况以及如何解决它。 :)
age <= 14
不是一个有效的 Go 表达式,尽管它可以用作一个表达式的一部分。 Go 非常讲究所有被消费的值。
这不是使用 <=
运算符编写 case
的正确方法。
switch age {
case 1:
age <= 14
fmt.Println("Toy Story 4")
...
}
如果 age
的值为 1
,则该大小写匹配。您想要使用这样的开关样式:
switch {
case age <= 14:
fmt.Println("Toy Story 4")
case age <= 18:
...
...
}
补充一下 Daniel 所写的 — 基本上 switch 语句(除非它是类型切换但我们不要跑题)有两种形式:
switch { // note the absense of any expression here
case bool_expr_1:
...
case bool_expr_2:
...
和
switch any_expr {
case value_to_match_1:
...
case value_to_match_2:
...
在第一种形式中,每个 case
分支中的表达式从上到下求值,第一个求值为 true
,“获胜”——也就是说,其中的代码分支被执行。
在第二种形式中,对表达式求值以产生一个值,然后将该值与每个 case 分支中的值进行精确比较。
您尝试过将两种形式结合起来,但行不通。
您可能认为 case 分支中的那些数字是应该如何检查分支的顺序,但不,不是这样。
package main
import "fmt"
func main() {
var age int
fmt.Scanf("%d", &age)
// Code your switch or if...else-if statement here.
switch age {
case 1:
age <= 14
fmt.Println("Toy Story 4")
case 2:
age <= 18
fmt.Println("The Matrix")
case 3:
age <= 25
fmt.Println("John Wick")
case 4:
age <= 35
fmt.Println("Constantine")
case 5:
age > 35
fmt.Println("Speed")
default:
fmt.Println("Error: Unknown age")
}
}
我在 scanf
的 IDE 中得到一个黄色标记,标记未处理的错误。此外,所有案例的第一行都标记为红色,以防止编译。我得到的错误是 age <= 14 is evaluated, but not used
。所有的陈述都是一样的。我已经在网上搜索并查看了示例,据我所知,代码如材料和示例所述。这是 Go Land (JetBrains) 的屏幕截图:
有人有想法吗?另外,如果您回答,请记住,这是 Go 课程的一课,我必须使用 scanf。我可以将开关更改为 else if,这可能会解决问题,但我有点好奇,为什么会发生这种情况以及如何解决它。 :)
age <= 14
不是一个有效的 Go 表达式,尽管它可以用作一个表达式的一部分。 Go 非常讲究所有被消费的值。
这不是使用 <=
运算符编写 case
的正确方法。
switch age {
case 1:
age <= 14
fmt.Println("Toy Story 4")
...
}
如果 age
的值为 1
,则该大小写匹配。您想要使用这样的开关样式:
switch {
case age <= 14:
fmt.Println("Toy Story 4")
case age <= 18:
...
...
}
补充一下 Daniel 所写的 — 基本上 switch 语句(除非它是类型切换但我们不要跑题)有两种形式:
switch { // note the absense of any expression here
case bool_expr_1:
...
case bool_expr_2:
...
和
switch any_expr {
case value_to_match_1:
...
case value_to_match_2:
...
在第一种形式中,每个 case
分支中的表达式从上到下求值,第一个求值为 true
,“获胜”——也就是说,其中的代码分支被执行。
在第二种形式中,对表达式求值以产生一个值,然后将该值与每个 case 分支中的值进行精确比较。
您尝试过将两种形式结合起来,但行不通。
您可能认为 case 分支中的那些数字是应该如何检查分支的顺序,但不,不是这样。