Go语言if语句不加括号、必须花括号、支持初始化语句;条件前可声明临时变量,作用域限于if块;else if连续书写,无fallthrough;常用于err检查,确保资源安全。
Go语言的if语句简洁直接,不加括号、必须有花括号、支持初始化语句——这是它和C/Java最明显的区别。
Go中if语句的标准写法是:
()
{ 必须和if在同一行,不能换行示例:
if x := getValue(); x > 10 { fmt.Println("x 大于 10") }
这里x := getValue()只在if作用域内有效,很适合做临时变量判断。
标准的else if写法如下(注意else if之间没有分号或换行):
if score >= 90 {
grade = "A"
} else if score >= 80 {
grade = "B"
} else if score >= 70 {
grade = "C"
} else {
grade = "F"
}
Go不支持switch那样的“fallthrough”,每个分支互斥;也不允许省略花括号,哪怕只有一行代码。
Go里函数常返回(value, error),所以if经常这样用:
if file, err := os.Open("config.txt"); err != nil {
log.Fatal(err)
} else {
defer file.Close()
// 处理 file
}
这种写法既做了错误检查,又把file的作用域限制在if-else块内,避免后续误用未初始化的变量。
几个新手容易踩的坑:
{},否则编译报错if a := 1; a ✅,if a := 1, a ❌
if-else链中都不可见(只在当前if或else if块内)基本上就这些。写熟了会觉得非常干净利落,逻辑一目了然。