go无while/do-while和三元运算符;if与for可省括号但花括号不可省,且if支持初始化语句(如if err:=f(); err!=nil{…}),变量作用域限于对应分支;for是唯一循环结构,有类c、while、无限循环三种形式。
Go 里没有 while、do-while,也不支持三元运算符;if 和 for 的括号可以省,但花括号不能省——这是写错最多的地方。
Go 的 if 语句必须带花括号,且支持初始化语句
常见错误是照搬其他语言习惯,写成 if x > 0 { ... } else { ... } 看似正常,但一旦漏掉花括号(比如只有一行想省略),编译直接报错:syntax error: unexpected else, expecting }。
Go 要求所有分支都必须用花括号包裹,哪怕只有一行。另外,if 后可紧跟初始化语句,变量作用域仅限该 if 块:
if err := someFunc(); err != nil {
log.Fatal(err)
} else if n := len(data); n == 0 {
fmt.Println("empty")
}
- 初始化语句和条件表达式之间用分号隔开,不是逗号
-
err和n在各自分支外不可访问,避免污染外层作用域 - 不支持
if x > 0 ? a : b这类三元写法,得用完整if/else
for 是 Go 唯一的循环结构,三种写法对应不同场景
Go 没有 while 或 do-while,所有循环都靠 for 实现。它有三种合法形式,本质都是同一语法糖的不同展开: