If语句
If语句
类似for循环,go中的if语句也是同样,if后面不能有括号,而if里面必须要有花括号:
if x < 0 {
return sqrt(-x) + "i"
}
跟 for
一样,if
语句可以在条件之前执行一个简单的语句:
if v := math.Pow(x, n); v < lim {
// v在这里可以访问
return v
}
// v在这里不可以访问
注意:这个语句定义的变量的作用域仅在 if
范围之内,包括else:
if v := math.Pow(x, n); v < lim {
return v
} else {
// else这里可以访问
fmt.Printf("%g >= %g\n", v, lim)
}
If statements
https://golang.org/ref/spec#If_statements
“if “语句根据布尔表达式的值指定两个分支的条件执行。如果表达式的值为真,则执行 “if “分支,否则,如果存在,则执行 “else “分支。
IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .
if x > max {
x = max
}
表达式前面可以有一个简单的语句,在表达式被评估之前执行。
if x := f(); x < y {
return x
} else if x > z {
return z
} else {
return y
}
if
https://golang.org/doc/effective_go.html#if
在围棋中,一个简单的if是这样的:
if x > 0 {
return y
}
强制括号鼓励在多行上写简单的if语句。无论如何这样做都是好的风格,特别是当正文中包含一个控制语句,如返回或break时。
由于if和switch接受一个初始化语句,所以通常会看到一个用来设置局部变量的语句。
if err := file.Chmod(0664); err != nil {
log.Print(err)
return err
}
在 Go 库中,你会发现,当一个 if 语句没有流入下一个语句时–也就是说,正文以 break、continue、goto 或 return 结尾时,不必要的 else 会被省略。
f, err := os.Open(name)
if err != nil {
return err
}
codeUsing(f)
这是一个常见情况的例子,代码必须防范一连串的错误情况。如果成功的控制流向下运行,在出现错误情况时消除错误情况,那么代码的阅读效果就会很好。由于错误情况往往以return语句结束,因此产生的代码不需要 else语句。
f, err := os.Open(name)
if err != nil {
return err
}
d, err := f.Stat()
if err != nil {
f.Close()
return err
}
codeUsing(f, d)