Go的if语句必须省略小括号但可带初始化语句,else须与if右大括号同行,switch默认无穿透且布尔表达式不支持隐式转换。
Go 里 if 语句不能省略小括号,但可以带初始化语句
Go 的
语法和 C/Java 不同:条件表达式**不加小括号**是语法错误,但允许在条件前加一句初始化语句(用分号隔开),该变量
作用域
仅限于整个
块(包括
)。这常用来避免污染外层作用域。
常见错误是写成
,会报错
;也有人误以为初始化语句里的变量能在
外使用,实际不行。
else 必须和 if 的右大括号在同一行
Go 强制要求
关键字必须紧接在
块的
后面,中间不能换行。否则编译器会自动插入分号,导致
悬空,报错
。
✅ 正确:
❌ 错误:
(换行即失败)
⚠️ 注意:
块末尾的
本身也不能单独成行(除非用括号包裹多行表达式)
switch
通常比长链 if-else 更清晰,且默认无穿透
当判断条件是等值比较(尤其是多个
或
值为常量)时,
可读性更好。Go 的
默认每个
执行完就退出,不需要
—— 这和 C/Java 相反。如需穿透,得显式写
。
立即学习
“
go语言免费学习笔记(深入)
”;
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
容易踩的坑:习惯性加
会导致
编译错误
;而忘了
又会让逻辑漏掉后续 case。
布尔表达式不支持
隐式转换
,nil 判断要小心类型
Go 没有“真值/假值”概念:
中
必须是
类型。常见错误是想直接判空:
❌
→ 编译错误:cannot convert
to
✅ 应写成
✅ 指针或接口判 nil:
、
特别注意:切片、map、channel、函数、指针、接口在为
时长度/容量/值都为零值,但必须显式跟
比较或用
等函数,不能直接当条件。
Go 的条件判断看着简单,但初始化语句作用域、
换行限制、无
隐式类型转换
这三点,是新手和跨语言开发者最容易写出编译错误的地方。
ififelseif result := calculate(); result > 0 {
fmt.Println("positive")
} else if result == 0 {
fmt.Println("zero")
} else {
fmt.Println("negative")
}
// result 在这里已不可访问if (x > 0) { ... }syntax error: unexpected (elseelseif}elseelse without if} else {}\nelse {if}==caseswitchswitchcasebreakfallthroughswitch mode {
case "dev":
logLevel = "debug"
case "prod":
logLevel = "error"
default:
logLevel = "info"
}
// 不会意外执行 default 分支breakbreak is not in a loop or switchfallthroughif x { ... }xboolif mySlice { ... }[]intboolif len(mySlice) > 0 { ... }if err != nil { ... }if p != nil { ... }nilnillen()else