Golang default 关键字
最后修改于 2025 年 5 月 7 日
本教程解释了如何在 Go 中使用 default
关键字。我们将通过实际示例介绍 switch 语句基础知识以及 default 情况。
当没有其他情况匹配时,switch 语句中的 default
情况就会执行。它是可选的,但对于处理意外或 fall-through 值非常有用。
在 Go 中,default
可以出现在 switch 语句中的任何位置,尽管习惯上将其放在最后。它确保所有可能的值都得到处理。
基本的 default 情况
default
最简单的用法是在没有情况匹配时提供一个备用方案。本示例演示了其基本语法和行为。
package main import "fmt" func main() { day := "Tuesday" switch day { case "Monday": fmt.Println("Start of work week") case "Friday": fmt.Println("Almost weekend") default: fmt.Println("Midweek day") } }
由于“Tuesday”不匹配任何情况,因此会执行 default
块。输出将是“Midweek day”。
带数字值的 default
default
可与所有类型一起使用。本示例展示了其在 switch 语句中使用整数值的情况。
package main import "fmt" func main() { age := 42 switch { case age < 18: fmt.Println("Minor") case age >= 18 && age < 65: fmt.Println("Adult") default: fmt.Println("Senior") } }
switch 会评估条件而不是值。由于 42 匹配第二个情况,因此 default
在此处不执行。
类型 switch 中的 default
类型 switch 可以使用 default
来处理意外的类型。本示例演示了带备用方案的类型检查。
package main import "fmt" func checkType(x interface{}) { switch x.(type) { case int: fmt.Println("Integer") case string: fmt.Println("String") case bool: fmt.Println("Boolean") default: fmt.Println("Unknown type") } } func main() { checkType(42) checkType("hello") checkType(3.14) }
default
情况会捕获 float64 值 (3.14),因为它没有被显式处理。它会为该输入打印“Unknown type”。
Default 的位置很重要
default
可以出现在 switch 中的任何位置。本示例展示了位置如何影响执行流程。
package main import "fmt" func main() { value := 3 switch value { default: fmt.Println("Default case first") case 1: fmt.Println("One") case 2: fmt.Println("Two") case 3: fmt.Println("Three") } }
尽管 default
出现在前面,Go 仍然按顺序评估情况。匹配的情况 (3) 会执行,表明位置不影响逻辑。
带空情况的 default
空情况会 fall through 到 default
。本示例演示了空情况与 default 情况的交互。
package main import "fmt" func main() { letter := 'b' switch letter { case 'a', 'e', 'i', 'o', 'u': fmt.Println("Vowel") case ' ': // Empty case falls through default: fmt.Println("Consonant or other") } }
空格字符匹配一个空情况,导致执行 fall through 到 default
。对于 'b',输出将是“Consonant or other”。
实际示例:错误处理
这个实际示例使用 default
来清晰地处理函数中不同状态码的错误处理。
package main import "fmt" func handleStatus(code int) string { switch code { case 200: return "OK" case 404: return "Not Found" case 500: return "Internal Server Error" default: return fmt.Sprintf("Unknown status: %d", code) } } func main() { fmt.Println(handleStatus(200)) fmt.Println(handleStatus(403)) }
default
情况可以优雅地处理意外的状态码,如 403,返回一个描述性消息而不是失败。
Default 与 if-else 对比
本示例将 default
与传统的 if-else 链进行对比,以显示何时何种方法更可取。
package main import "fmt" func main() { // Switch with default fruit := "dragonfruit" switch fruit { case "apple", "pear": fmt.Println("Common fruit") case "durian": fmt.Println("Exotic fruit") default: fmt.Println("Unknown fruit") } // Equivalent if-else if fruit == "apple" || fruit == "pear" { fmt.Println("Common fruit") } else if fruit == "durian" { fmt.Println("Exotic fruit") } else { fmt.Println("Unknown fruit") } }
两种方法都产生相同的输出。带有 default
的 Switch 对于多个离散值更简洁,而 if-else 更适合范围。
来源
本教程通过 switch 语句在各种场景下的 fallback 示例,涵盖了 Go 中的 default
关键字。