5、条件语句
package main import ( "fmt" "io/ioutil" ) // 一般 switch 语句 func eval(a,b int,op string) int { var result int switch op { case "+": result = a + b case "-": result = a - b case "*": result = a * b case "/": result = a / b default: panic("错误运算符" + op) } return result } // 简洁版 switch func grade (score int) string { g := "" switch { case score < 0 || score > 100 : panic(fmt.Sprintf("分数错了")) // panic 用与手动抛出错误 case score < 60: g = "f" case score < 80: g = "c" case score < 90: g = "b" case score <= 100: g = "a" } return g } func main() { filename := "a.txt" contents, err := ioutil.ReadFile(filename) // 正常条件语句 if err != nil { fmt.Println(err) } else { fmt.Printf("%s\n",contents) } // 先执行一条语句,再进行判断 if contents1, err1 := ioutil.ReadFile(filename); err != nil { fmt.Println(err1) } else { fmt.Printf("%s\n",contents1) } // fmt.Printf("%s",contents1) // 报错! if语句里面定义的contents1、err1,出了这个块就访问不到了 fmt.Println(eval(1,2,"+")) fmt.Println( grade(10), grade(100), ) }
switch 的 fallthrough 语句
Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码
switch "a" { case "a": fmt.Println("a") fallthrough case "b": fmt.Println("b") case "c": fmt.Println("c") default: }