欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Go 流程控制

程序员文章站 2022-06-24 20:02:05
...

Go流程控制

Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码,降低重复代码而生的结构,属于扩展类的流程控制。

一:if else(分支结构)

package main

import "fmt"

func main() {
	age := 36
	// 单个条件判断
	// if后边跟一个表达式,表达式返回的必须为一个布尔值
	// if age > 18	{  // 满足条件执行的代码
	// 	fmt.Println("你可以去网吧了")
	// }else{  // 不满足条件执行的代码
	// 	fmt.Println("赶紧回家写作业")
	// }

	// 多个条件判断
	if age > 35	{  // 满足条件执行的代码
		fmt.Println("你的头秃了吗")
	}else if age > 18 {  // 不满足条件执行的代码
		fmt.Println("你可以去网吧了")
	}else {
		fmt.Println("赶紧回家写作业")
	}
}

特殊写法

package main

import "fmt"

func main() {
	// 作用域
	// age的变量此时只在if条件的判读语句中生效,
	if age := 19; age > 18 {
		fmt.Println("可以去网吧了")
	} else {
		fmt.Println("该写暑假作业了")
	}
}

二:for(循环结构)

Go语言中的所有循环类型可以使用for关键字来完成

条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环

for循环基本格式:

  • for 初始语句;条件表达式;结束语句{

    ​ 循环体语句

    }

基本循环(常用方式)

在for循环中定义初始变量,初始变量的作用域仅限于此个for循环中

package main

import "fmt"

func main() {
	// 基本格式
	for i := 0; i < 10; i++{
		fmt.Println(i)
	}
}

省略开头的循环方式

在for循环的外面定义初始变量,初始变量可在函数内部使用

package main

import "fmt"

func main() {
	// 省略初始语句
	i := 5
	for ; i<10; i++{
	fmt.Println(i)
	}
}

省略开头结尾的循环

初始变量放在for循环外,结束语句放在for循环末尾

package main

import "fmt"

func main() {
	// 省略开头,结尾语句
	i := 5
	for i < 10 {
		fmt.Println(i)
		i++
	}
}

无限循环

package main

import "fmt"

func main() {
	// 无限循环
	for {
		fmt.Println("0")
	}
}

for range(键值循环)

Go语言中可以使用for range 遍历数组、切片、字符串、map、及通道(channel)。通过for range遍历的返回值有以下规律:

  • 数组、切片、字符串返回索引和值
  • map返回键和值
  • 通道(channel)只返回通道内的值
package main

import "fmt"

func main() {
	# for range 循环
	w := "hello 北京"
	# 若只用一个变量接受则会返回索引,如果只想返回值则可以使用"_"来代替索引变量
	for i, v := range w {
	fmt.Printf("%d:%c\n",i,v)
	}

	}

练习:九九乘法表

package main

import "fmt"

func main() {
	// 九九乘法表练习
	for col := 1; col < 10; col++ {
		for row := 1; row < col+1; row++ {
			fmt.Printf("%dx%d=%d ",row,col,row*col)
		}
		fmt.Println()
	}
}

跳出for循环

利用break跳出for循环,遇到break时终止循环

package main

import "fmt"

func main() {
	// 当i=5时跳出for循环
	for i := 0; i < 10; i++ {
		if i == 5 {
			break  // 跳出for循环
		}
		fmt.Println(i)
	}
}

跳过for循环

利用continue跳过for循环,遇到continue时不执行下面的操作,直接跳到下一次循环

package main

import "fmt"

func main() {
	// 当i=5时跳过这次for循环
	for i := 0; i < 10; i++{
		if i == 5 {
			continue  // 跳过for循环
		}
		fmt.Println(i)
	}
}

三:switch

可简化大量判断(一个变量和一个具体的值做比较),当找到第一个满足的case时,代码不会继续向下执行

package main

import "fmt"

func main() {
	n := 3
	switch n {
	case 1:
		fmt.Println("第一种情况")
	case 2:
		fmt.Println("第二种情况")
	case 3:
		fmt.Println("第三种情况")
	default:
		fmt.Println("第四种情况")
	}
}

switch_case赋多个值

变量的赋值也可在switch中进行,但只能在这个switch中生效

package main

import "fmt"

func main() {
	switch n := 3; n{
	case 1,3,5,7:
		fmt.Println("奇数")
	case 2,4,6,8:
		fmt.Println("偶数")
	}
}

switch_case赋比较语句

package main

import "fmt"

func main() {
	switch age := 23; {
	case age > 18:
		fmt.Println("已成年")
	case age < 18:
		fmt.Println("未成年")
	}	
}

四:goto

用来跳转到指定的标签

当执行goto语句后,会从goto下面的语句开始执行

package main

import "fmt"

func main() {
	// goto + label实现跳出多层for循环
	for i := 0; i < 10; i++ {
		for j := 'A'; j < 'Z'; j++ {
			if j == 'F' {
				fmt.Printf("%v\n",j)
				goto xx  // 跳到指定标签
			}	
			fmt.Printf("%v\n",j)		
		}	
 	}
xx:  // 标签
	fmt.Println("over")
}