if语句
func main() {
//if语句
num := 11
if num % 2 == 0 {
fmt.Println("偶数")
}else{
fmt.Println("奇数")
}
score := 55
if score >= 90 {
fmt.Println("优")
}else if score >= 80 {
fmt.Println("良")
}else if score >= 60 {
fmt.Println("一般")
}else{
fmt.Println("不及格")
}
// if statement; condition
if num := 11; num % 2 == 0 {
fmt.Println("偶数")
}else{
fmt.Println(num)
}
//fmt.Println(num)
}
switch语句
func main{
score := 95
switch {
case score >= 90:
grade = "A"
fmt.Println("优")
case score >= 80 && score<= 89:
grade = "B"
case score >= 70 && score<= 79:
grade = "C"
case score >= 70 && score<= 79:
grade = "D"
default:
grade = "E"
}
//不同的 case 表达式使用逗号分隔。一分支多值
var a = "daddy"
switch a {
case "mum", "daddy":
fmt.Println("family")
}
var x interface{}
switch i := x.(type) {
case nil:
fmt.Printf(" x 的类型 :%T",i)
case int:
fmt.Printf("x 是 int 型")
case float64:
fmt.Printf("x 是 float64 型")
case func(int) float64:
fmt.Printf("x 是 func(int) 型")
case bool, string:
fmt.Printf("x 是 bool 或 string 型" )
default:
fmt.Printf("未知型")
}
}
循环语句
package main
import "fmt"
func main() {
//for init; condition; post { } 计算1-10的和
sum := 0
for i := 1; i<=10; i++ {
sum += i
}
fmt.Println(sum)
//循环字符串
name := "name:程序员"
for _, value := range name {
fmt.Printf("%c\n", value)
//fmt.Println(index, value)
}
//在做字符串遍历的时候要尽量使用range,字符串有中文时,可以将字符串转为rune数组
name_arr := []rune(name)
for i := 0; i<len(name_arr); i++ {
fmt.Printf("%c\n", name_arr[i])
}
}
goto语句
Go 语言的 goto 语句可以无条件地转移到过程中指定的行。
goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
但是,在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
goto 语句流程图如下:
示例:
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* 循环 */
LOOP: for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
}
应用场景
使用 goto 退出多层循环
痛点
package main
import "fmt"
func main() {
var breakAgain bool
// 外循环
for x := 0; x < 10; x++ {
// 内循环
for y := 0; y < 10; y++ {
// 满足某个条件时, 退出循环
if y == 2 {
// 设置退出标记
breakAgain = true
// 退出本次循环
break
}
}
// 根据标记, 还需要退出一次循环
if breakAgain {
break
}
}
fmt.Println("done")
}
改良版本
package main
import "fmt"
func main() {
for x := 0; x < 10; x++ {
for y := 0; y < 10; y++ {
if y == 2 {
// 跳转到标签
goto breakHere
}
}
}
// 手动返回, 避免执行进入标签
return
// 标签
breakHere:
fmt.Println("done")
}
统一错误处理
err := firstCheckError()
if err != nil {
goto onExit
}
err = secondCheckError()
if err != nil {
goto onExit
}
fmt.Println("done")
return
onExit: // 在onExit标签内统一处理错误
fmt.Println(err)
exitProcess()