Golang play.golang.org示例代码解析:md_8FsByrf0

10 回复

是的。我应该移除那个maxGrade并使用我传入的参数

更多关于Golang play.golang.org示例代码解析:md_8FsByrf0的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你在每个边界条件上都犯了同样的错误。100不小于100,90既不小于也不大于90,等等。

这不是我在讨论的内容…

你尝试过输入 9080 吗?

它只给我第一个案例。我也将 maxScore 的声明放在了包作用域。没有变化

这与变量的作用域无关,而是与你所赋的值有关。尝试将其值更改为95,这样你就能看到如果满足switch语句的第一个条件

func main() {
    fmt.Println("hello world")
}

嗯,游乐场不允许交互,你既不能指定参数,也不能输入任何内容。

只需尝试使用一些示例值调用你的函数。

10, 65, 75, 85, 95, 70, 80, 90, 100

代码链接

我需要通过命令行传递数字,因此无需手动声明。这在我的IDE上运行完美,但在Playground上不行(这种情况似乎经常发生)

你将maxScore设置为100,执行了所有的switch分支。请将maxScore改为95后重新运行…

func main() {
    maxScore := 100
    switch {
    case maxScore > 90:
        fmt.Println("优秀")
    case maxScore > 80:
        fmt.Println("良好")
    case maxScore > 70:
        fmt.Println("中等")
    default:
        fmt.Println("需要改进")
    }
}

同意@Nobbz的观点,程序持续失败的原因在于没有任何输入值,导致始终执行default分支。

我对你的源码进行了修改,使用了整数切片(https://play.golang.org/p/ZnDQC1MmdXx)。这样你就可以在playground上进行测试了。

func main() {
    // 示例代码
    values := []int{1, 2, 3}
    for _, v := range values {
        select {
        case <-time.After(time.Second):
            fmt.Println(v)
        default:
            fmt.Println("default case")
        }
    }
}

在您提供的代码中,问题出在switch语句的语法使用上。Go语言的switch语句默认不需要在每个case后添加break,但您使用了fallthrough关键字,这会导致控制流继续执行下一个case,从而总是进入default分支。以下是解析和修正后的代码:

问题分析:

  • 原始代码中,每个case都使用了fallthrough,这导致无论输入金额是多少,最终都会执行到default分支。
  • fallthrough会强制继续执行下一个case,而不是退出switch块。

修正后的代码:

package main

import "fmt"

func main() {
    var amount int
    fmt.Print("Enter amount: ")
    fmt.Scan(&amount)
    
    switch {
    case amount < 1000:
        fmt.Println("Amount is less than 1000")
    case amount >= 1000 && amount < 5000:
        fmt.Println("Amount is between 1000 and 5000")
    case amount >= 5000 && amount < 10000:
        fmt.Println("Amount is between 5000 and 10000")
    default:
        fmt.Println("Amount is 10000 or more")
    }
}

关键修改:

  • 移除了所有fallthrough语句,这样每个case在匹配后会自动退出switch
  • 调整了case条件,确保它们互斥且覆盖所有范围(例如,使用amount >= 1000 && amount < 5000来明确区间)。

示例输出:

  • 输入500,输出:Amount is less than 1000
  • 输入3000,输出:Amount is between 1000 and 5000
  • 输入7500,输出:Amount is between 5000 and 10000
  • 输入15000,输出:Amount is 10000 or more

这个修正确保了switch语句根据输入金额正确匹配并输出对应的字符串,而不是总是进入default分支。

回到顶部