python基础教程goto语句_Go语言基础之流程控制

本文详细介绍了Go语言中的流程控制结构,包括if条件判断(带和不带初始化语句)、for循环(基础形式、无初始和结束语句、无限循环、for range)以及switch和goto语句的使用。同时,给出了使用这些结构实现的功能示例,如打印9*9乘法表等。
摘要由CSDN通过智能技术生成

Go语言基础之流程控制

流程控制是每种语言控制逻辑走向和执行顺序的重要部分.

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

if else (分支结构)

if条件判断基本语法

Go语言中if条件判断的格式如下:

package main

import "fmt"

func main() {

var age = 18

if age == 18{

fmt.Println("春生成年人了 ")

}else if age < 18{ // 这个大括号的位置 不能变

fmt.Println("春生还没有成年")

}else { // 这个大括号的位置 不能变

fmt.Println("春生超过18了成为北京吴彦祖了。")

}

}

当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3。 if判断中的else if和else都是可选的,可以根据实际需要进行选择。

Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个if或else if右边的大括号在同一行。

举个例子:

func ifDemo1() {

score := 65

if score >= 90 {

fmt.Println("A")

} else if score > 75 {

fmt.Println("B")

} else {

fmt.Println("C")

}

}

if条件特殊写法

if条件判断还有一种特殊写法,可以在if表达式之前添加一个执行语句,在根据变量值判断:·

package main

import "fmt"

func main() {

if age:=18; age == 18{ // 可以看到 我if表达式里面声明了一个 age 当前着age 只有if 代码块中存在 不会在函数的作用域中

fmt.Println("春生成年人了")

}else if age < 18{

fmt.Println("春生还没有成年")

}else {

fmt.Println("春生超过18了成为北京吴彦祖了。")

}

}

思考题: 上下两种写法的区别在哪里?

for(循环结构)

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

for 循环的基本格式如下:

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

循环体语句

}

for i:=0;i < 10;i++{

fmt.Println(i)

}

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

package main

import "fmt"

func ForDemo() {

for i:=0;i < 10;i++{

fmt.Println(i)

}

}

func main() {

ForDemo()

}

结果:

0

1

2

3

4

5

6

7

8

9

Process finished with exit code 0

for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,例如:

func forDemo2() {

i := 0

for ; i < 10; i++ {

fmt.Println(i)

}

}

for循环的初始语句和结束语句都可以省略,例如:

func forDemo3() {

i := 0

for i < 10 {

fmt.Println(i)

i++

}

}

这种写法类似于其他编程语言中的while,在while后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。

无限循环

for {

循环体语句

}

for循环可以通过break、goto、return、panic语句强制退出循环。

for range (建值循环)

Go语言中可以使用 for range 便利数组、切片、字符串、map及通道(channel).通过for range遍历的返回值

有以下规律:

数据、切片、字符串返回值返回索引和值

map返回键和值

通道(channel)只返回通道内的值

代码:

package main

import "fmt"

func ForDemo() {

// for range 字符串

var s1 = "北京吴彦祖"

for i,v := range s1 { // rune 类型 utf-8

fmt.Println(i,v) // i: 是索引 v: 是值

}

var m = map[string]string{

"name":"春生",

"age":"18",

}

// map

for k,v := range m{ // rune 类型 utf-8

fmt.Println(k,v) // k :是建 "name" v:是值 "春生 "

}

// 数组 []string

var Array = []int{1,2,3,4,5}

for i,v:= range Array{

fmt.Println(i,v) // i:是索引 v:是值

}

}

func main() {

ForDemo()

}

结果:

0 21271

3 20140

6 21556

9 24422

12 31062

name 春生

age 18

0 1

1 2

2 3

3 4

4 5

Process finished with exit code 0

switch case

使用 switch语句可方便的对大量的值进行条件判断.

package main

import "fmt"

func SwitchDemo() {

age := 18

switch age {

case 18:

fmt.Println("春生成年了")

case 19:

fmt.Println("春生比成年还打了一岁")

default:

fmt.Println("春生不管怎么样都是人")

}

}

func main() {

SwitchDemo()

}

注意: Go语言规定每个 stitch 只能有一个 default 分支.

一个分支可以有多个值,多个case值中间使用英文逗号分隔.

package main

import "fmt"

func SwitchDemo() {

switch n := 7; n {

case 1,3,5,7:

fmt.Println("奇数")

case 2,4,6,8:

fmt.Println("偶数")

}

}

func main() {

SwitchDemo()

}

分支还可以使用表达式,这个时候switch语句后面不需要在跟判断变量.例如:

package main

import "fmt"

func SwitchDemo() {

var age = 30

switch {

case age < 25:

fmt.Println("好好学习天天向上")

case age > 25 && age >35:

fmt.Println("好好工作")

case age > 60:

fmt.Println("好好享受生活")

default:

fmt.Println("活着真好")

}

}

func main() {

SwitchDemo()

}

fallthrough

fallthrough语法可以执行满足条件下的case的下一个case,

是为了兼容C语言中的case 设计

package main

import "fmt"

func switchDemo() {

var s = 1

switch {

case s == 1:

fmt.Println(1)

fallthrough

case s == 2:

fmt.Println(2)

case s == 3:

fmt.Println(3)

case s == 4:

fmt.Println(4)

default:

fmt.Println("....")

}

}

func main() {

switchDemo()

}

结果:

1

2

Process finished with exit code 0

可以看到 结果出现了1 和 2。明明 2 不满足结果 却出现了 这就是fallthrough 无条件的满足下一个 case

goto (跳转指定标签)

goto语句通过标签进行代码间的无条件跳转.

goto语句可以在快速跳出循环、避免重复退出上有一定的帮助.

Go语言中使用goto语句能简化一些代码的实现过程.

例如双层嵌套for循环要推出时:

package main

import "fmt"

func GotoDemo(){

var boolbreak = false

for i:=0;i<10;i++{

for j:=0;j<10;j++{

if j == 2{

boolbreak = true

break

}

fmt.Println(i,j)

}

if boolbreak {

break

}

}

}

func main() {

GotoDemo()

}

使用goto语句能简化代码:

func gotoDemo2() {

for i := 0; i < 10; i++ {

for j := 0; j < 10; j++ {

if j == 2 {

// 设置退出标签

goto breakTag

}

fmt.Printf("%v-%v\n", i, j)

}

}

return

// 标签

breakTag:

fmt.Println("结束for循环")

}

break (跳出循环)

break 语句可以结束 for、switch 和 select 的代码块.

break 语句还可在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的 for、

switch 和 select 的代码块上.举个例子:

package main

import "fmt"

func GotoDemo(){

BREAKDEMO1:

for i:=0;i<10;i++{

for j:=0;j<10;j++{

if j == 2{

break BREAKDEMO1

}

fmt.Println(i,j)

}

}

}

func main() {

GotoDemo()

}

结果:

0 0

0 1

Process finished with exit code 0

可以看到 外层循环也退出了.

continue (继续下次循环)

continue 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在 for循环内使用.

在continue 语句后添加标签时,表示开始标签对应的循环.例如:

func continueDemo() {

forloop1:

for i := 0; i < 5; i++ {

// forloop2:

for j := 0; j < 5; j++ {

if i == 2 && j == 2 {

continue forloop1

}

fmt.Printf("%v-%v\n", i, j)

}

}

}

练习题

编写代码打印9*9乘法表

package main

import "fmt"

func Demo(){

for i:=1;i<10;i++{

for j:=1;j<10;j++{

fmt.Printf("%d * %d = %d \t",i,j,i*j)

}

fmt.Println()

}

}

func main() {

Demo()

}

结果:

1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9

2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27

4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36

5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45

6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54

7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 7 * 8 = 56 7 * 9 = 63

8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 8 * 9 = 72

9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值