golang笔记-流程控制

1. 分支结构 

1.1.  if 单分支结构

package main

import "fmt"

func main() {
	var count int = 20

	// 单分支结构 if 表达式 {....} 区别java 表达式的() 建议省略
	// 表达式为true 执行 {} 中的内容 表达式为false {}中的代码不执行
	if count < 30 {
		fmt.Println("对不起 口罩库存不足")
	}
	//在golang中,if后面可以并列加入变量的定义 变量定义和表达式使用 英文分号 分隔
	if count2 := 20; count2 < 30 {
		fmt.Println("对不起 口罩库存不足")
	}
}

1.2. if-else 双分支结构

package main

import "fmt"

func main() {
	// 双分支结构
	// 表达式为 true 执行 if后边 {} 中的内容,表达是为false 执行 else {} 中的内容
	if count := 30; count < 30 {
		fmt.Printf("库存充足")
	} else { //else必须跟在if的 花括号后边,不能换行,换行会报错
		fmt.Printf("库存不足")
	}

}

1.3. if- else if -else多分支结构

package main

import "fmt"

func main() {

	var score int = 77
	// 多个分支
	// 只会执行第一个为true的分支,后续代码阻断执行
	if score >= 90 {
		fmt.Println("您的成绩为A级别")
	} else if score >= 80 {
		fmt.Println("您的成绩为B级别")
	} else if score >= 70 {
		fmt.Println("您的成绩为C级别")
	} else if score >= 60 {
		fmt.Println("您的成绩为D级别")
	} else {
		fmt.Println("您的成绩为E级别")
	}

}

1.4. switch分支

package main

import "fmt"

func main() {
	var score int = 66
	// switch 后边跟表达式\常量\变量\有返回值函数,表达式不需要加(),表达式的结果依次跟case比较,满足结果执行:后边的代码
	//case 后边跟常量 要求不能重复
	//case 后边跟变量 要求数据类型需要一致
	//case 后边可以跟多个值,使用逗号分隔
	//case 区别于java不需要 break 关键字预防case穿透
	// default 兜底分支 不是必须的

	switch score / 10 {

	case 10:
		fmt.Println("您的等级为A级")
	case 9:
		fmt.Println("您的等级为B级")
	case 8:
		fmt.Println("您的等级为C级")
	case 7, 6:
		fmt.Println("您的等级为D级")
	default:
		fmt.Println("您的等级为E级")
	}

	// switch 可以不带表达式,case后边跟bool表达式,当if分支使用
	var b int = 10
	switch {
	case b == 1:
		fmt.Println("case b == 1")
	case b == 2:
		fmt.Println("case b == 2")
	default:
		fmt.Printf("default:%v", b)
	}

	//switch 后边可以直接声明变量 使用英文分号结束,case 后需要跟和这个变量相关的 bool 表达式
	switch c := 7; {
	case c > 1:
		fmt.Println("switch c := 7;")
	}

	//使用 fallthrough 达到case穿透的效果,只穿透他所在的case
	switch c := 7; {
	case c > 7:
		fmt.Println("switch c := 7;")
		fallthrough
	case c > 6:
		fmt.Println("fallthrough")
	case c > 5:
		fmt.Println("fallthrough")
	}
}

2. 循环结构 

2.1. for循环

package main

import "fmt"

func main() {
	/**
	for循环语法格式: for 初始表达式;布尔表达式;迭代因子{循环体......}
	for的初始表达式 必须使用 :=的格式赋值,不能使用var
	*/
	var sum int
	for i := 0; i < 10; i++ {
		sum += i
	}
	fmt.Printf("sum最终的值为:%d", sum)
}

2.2. for range循环

package main

import "fmt"

func main() {
	// 普通for循环按照字节进行遍历  “你好”中文会乱码
	var str string = "hello golang你好"
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c \n", str[i])
	}

	//for range 可以遍历数组、切片、字符串、map及通道
	// for range语法 for key val:= range 变量名
	// 遍历str,遍历的每个结果下标被key接收,遍历的结果具体数值被value接收
	for key, value := range str {
		fmt.Printf("索引为:%d,值为:%c \n", key, value)
	}

}

3. 循环控制 

break:结束当前循环

continue:跳过本次循环,继续下一次循环

return:结束本次运行

goto:goto 跳转到指定行代码,配合标签使用,不建议使用

package main

import (
	"fmt"
)

func main() {

	/**
	break 结束循环
	*/
	var sum int = 0
	for i := 0; i <= 100; i++ {
		sum += i
		fmt.Println(sum)
		if sum >= 300 {
			break
		}
	}
	fmt.Println("-----------ok")

	/*
		break 标签 结束对应标签的循环
	*/
lable1:
	for i := 0; i < 100; i++ {
	lable2:
		for j := 0; j < 100; i++ {
			if i+j > 100 {
				break lable2
			}
			if i > 50 {
				break lable1
			}
		}

	}

	/*
		continue 跳过本次循环,继续下次循环 ,也可以加标签
	*/

	for i := 0; i < 100; i++ {
		if i%6 != 0 {
			continue
		}
		fmt.Println(i)
	}

	/*
		goto 跳转到指定行代码,配合标签使用,不建议使用
	*/

	/*
		return 结束程序执行
	*/

}

上一篇:Docker Swarm