一.break
break是一个跳转控制语句,用于终止某个语句块的执行,用于中断当前的for循环或者跳出switch语句
基本语法:
{
...
break
...
}
//案例
//随机生成1~100的一个数,直到生成了99这个数,看看一共用了几次
//注意:在go中,需要生成一个随机数种子,否则返回的数总数一个固定的
//思路:
//为了生成一个随机数,需要使用rand设置一个种子
//time.Now().Unix():返回一个从1970-01-01 00:00:00到现在的秒数
//time.Now().UnixNano():返回一个从1970-01-01 00:00:00到现在的纳秒数
//rand.Seed(time.Now().UnixNano()):生成一个随机数种子
//那么,如何产生一个随机数呢
//编写一个无限循环的控制,然后不停地产生随机数,当生成了99时,就使用break退出这个无限循环
//n := rand.Intn(100) + 1 // [0,100)
//fmt.Println(n)
package main
import
(
"fmt"
"math/rand"
"time"
)
var count int = 0
for {
rand.Seed(time.Now().UnixNano()) //生成种子数
n := rand.Intn(100) + 1 //范围[1, 100)
count++
if n == 99 {
break
}
}
fmt.Printf("生成99,一共使用了%v次 \n", count)
注意事项和细节说明
1).break出现在多层嵌套的语句块中,可以通过标签指明要终止的是哪一层语句
2).标签的使用
label1: { ... label2: { ... label3: { ... break label ... } } }
演示:
//演示一下指定标签的形式来使用break label1: for i := 0; i <= 4; i++ { //label2: //设置一个标签 for j := 0; j <= i; j++ { if j == 2 { //break //break默认会跳出最近的for循环 //break label2 break label1 } fmt.Println("j=", j) } } //1.break会默认跳出最近的循环 //2.break后面可以指定标签,跳出标签对应的for循环
//案例:
//实现登录验证,有三次机会,如果用户名为"张三",密码为"123456"提示登录成功,否则提示还有几次机会
var name string
var pass string
var channel int = 3
for i := 1; i <= 3; i++ {
fmt.Println("请输入用户名")
fmt.Scanln(&name)
fmt.Println("请输入密码")
fmt.Scanln(&pass)
if name == "张三" && pass == "123456" {
fmt.Println("登录成功")
break
} else {
channel--
fmt.Printf("你还有%v次登录机会\n",channel)
}
}
二.continue
基本介绍:
1).continue语句用于结束本次循环,继续执行下一次循环
2).continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的使用规则一样
基本语法
{
...
continue
...
}
//演示一下指定标签的形式来使用break
label1:
for i := 0; i <= 4; i++ {
//label2: //设置一个标签
for j := 0; j <= i; j++ {
if j == 2 {
//continue//continue默认会跳出到最近的一层for循环
//continue label2
continue label1
}
fmt.Println("j=", j)
}
}
//1.continue默认会跳出到最近的一层for循环
//2.continue后面可以指定标签,跳出到标签对应的for循环
//案例
//从键盘输入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时,结束程序(使用for,break,continue完成)
var num int
var pos int = 0
var neg int = 0
for {
fmt.Println("请输入一个整数:")
fmt.Scanln(&num)
if num == 0 {
break
}
if num > 0 {
pos++
continue
}
neg++
}
fmt.Printf("正数个数:%v,负数个数:%v", pos, neg)
//案例
//某人有100000块钱,每经过一个路口,需要缴费,规则如下:
//1.当现金>50000时,每次交5%
//2.当现金<50000时,每次交1000
//编写程序计算该人可以经过多少次路口,使用break,continue完善成
var num int // 经过的-路口数
var money float64 = 100000 // 所拥有的钱
for {
if money > 50000 {
money = money * 0.95
num++
continue
}
money = money - 1000
if money < 0 {
break
}
num++
}
fmt.Printf("经过%v次路口", num)
三.goto
基本介绍
1).go语言的goto可以无条件地转移到程序中指定的行
2).goto语句经常与条件语句配合使用,可以用来条件转移,跳出循环体等
3).在go程序中一般不主张使用goto,以免造成程序的混乱,使理解和调试都产生困难
基本语法
goto label
...
label :
...
package main
import (
"fmt"
)
func main() {
var n int = 10
fmt.Println("ok1")
fmt.Println("ok2")
fmt.Println("ok3")
if n < 10 {
goto label1
}
fmt.Println("ok4")
fmt.Println("ok5")
label1:
fmt.Println("ok6")
fmt.Println("ok7")
}
四.return
基本介绍
return在方法中使用时,表示跳出所在的函数或方法
for i := 1; i <= 10; i++ {
if i == 8 {
return
}
fmt.Println("i=", i)
}
fmt.Println("跳出了for循环")
说明:
1).如果return是在普通函数中,则跳出该函数,即不再执行函数中的return后面的代码,也可以理解成终止函数
2).如果在main函数中,表示终止main函数,也就是终止程序