模块 2 · 第 1 课(共 5)课程中的6/50~10 min
模块课程(1/5)
if、else 和 init 语句
在 Go 中,if 语法是经典语法,但有两个重要区别
与 C/Java 相比:条件周围没有括号,并且
能够直接在 if 中声明临时变量
(init 语句)。
基本语法
Go
if temperatura > 30 {
fmt.Println("caldo")
} else if temperatura > 20 {
fmt.Println("mite")
} else {
fmt.Println("fresco")
}大括号是强制性的,即使对于单行块也是如此。的
条件必须是 bool 类型:没有像 Python 或 JS 那样的“真实性”。
Go
n := 0
// if n { ... } // ERRORE: int non è bool
if n != 0 { ... } // ok初始化语句:范围仅限于 if
您可以声明变量仅在 if/else 内有效,
使用 ; 将其与条件分开:
Go
if v, err := call(); err == nil {
fmt.Println("ok", v)
} else {
fmt.Println("ko", err)
}
// qui v ed err NON esistono più这是处理错误而不污染外部范围的惯用模式。
if 范围内的阴影
如果外部变量通过 init 获得 "shadowed",内部 如果本地版本获胜。紧接着,外面的那一个又出现了。
Go
x := 10
if x := 3; x > 5 {
fmt.Println("dentro:", x) // mai stampato (3 < 5)
} else {
fmt.Println("else:", x) // 3
}
fmt.Println("dopo:", x) // 10 — quella esterna没有三元运算符
Go 没有 cond ? a : b。对于条件分配,您需要 if/else
3-4 行——这是一种有利于可读性的设计选择。
Go
var label string
if age >= 18 {
label = "adulto"
} else {
label = "minore"
}尝试一下
锻炼#go.m2.l1.e1
尝试:0加载中...
根据 n 的值打印“正”、“零”或“负”。
正在加载编辑器...
显示提示
`if / else if / else` 链带有符号上的条件。
3 次尝试后可用的解决方案
锻炼#go.m2.l1.e2
尝试:0加载中...
使用 init 语句在 if 中声明 v := 42 并仅当 v >= 18 时才打印它。
正在加载编辑器...
显示提示
语法:`if init;条件{...}`。
3 次尝试后可用的解决方案
Quiz#go.m2.l1.e3
准备好这个程序打印什么?
Go
x := 10
if x := 3; x > 5 {
fmt.Println("dentro:", x)
} else {
fmt.Println("else:", x)
}
fmt.Println("dopo:", x)回顾
- 没有括号的条件,大括号始终是强制的。
- 条件必须是
bool:没有隐含的真实性。 - Init
if v, err := f(); err == nil { ... }限制v和err的范围。 - init 中的遮蔽:小心不要遮蔽外部变量。
- 无三元:编写扩展的
if/else。