条件语句:条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。
循环语句:在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
以下为大多编程语言循环程序的流程图:
实例
demo1
package main
import (
"fmt"
)
func main() {
//请大家看个案例[ifDemo.go]:
//编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 "你年龄大
//于18,要对自己的行为负责!"
//分析
//1.年龄 ==> var age int
//2.从控制台接收一个输入 fmt.Scanln(&age)
//3.if判断
// var age int
// fmt.Println("请输入年龄:")
// fmt.Scanln(&age)
// if age > 18 {
// fmt.Println("你年龄大于18,要对自己的行为负责!")
// }
//golang支持在if中,直接定义一个变量,比如下面
if age := 20; age > 18 {
fmt.Println("你年龄大于18,要对自己的行为负责!")
}
}
demo2
package main
import (
"fmt"
)
func main() {
//请大家看个案例[IfDemo2.go]:
//编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 “你年龄大于18,要对
//自己的行为负责!”。否则 ,输出”你的年龄不大这次放过你了.”
//思路分析
//1. 年龄 ===》 var age int
//2. fmt.Scanln接收
//3. if --- else
//代码
var age int
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
if age > 18 {
fmt.Println("你年龄大于18~....")
} else {
fmt.Println("你的年龄不大这次放过你了")
}
}
demo3
package main
import (
"fmt"
)
//写一个非常简单的函数
func test(char byte) byte {
return char + 1
}
func main() {
// 案例:
// 请编写一个程序,该程序可以接收一个字符,比如: a,b,c,d,e,f,g
// a表示星期一,b表示星期二 … 根据用户的输入显示相依的信息.
// 要求使用 switch 语句完成
//分析思路
//1. 定义一个变量接收字符
//2. 使用switch完成
// var key byte
// fmt.Println("请输入一个字符 a,b,c,d,e,f,g")
// fmt.Scanf("%c", &key)
// switch test(key)+1 { //将语法现象
// case 'a':
// fmt.Println("周一, 猴子穿新衣")
// case 'b':
// fmt.Println("周二,猴子当小二")
// case 'c':
// fmt.Println("周三,猴子爬雪山")
// //...
// default:
// fmt.Println("输入有误...")
// }
// var n1 int32 = 51
// var n2 int32 = 20
// switch n1 {
// case n2, 10, 5 : // case 后面可以有多个表达式
// fmt.Println("ok1")
// case 90 :
// fmt.Println("ok2~")
// }
//switch 后也可以不带表达式,类似 if --else分支来使用。【案例演示】
var age int = 10
switch {
case age == 10 :
fmt.Println("age == 10")
case age == 20 :
fmt.Println("age == 20")
default :
fmt.Println("没有匹配到")
}
//case 中也可以对 范围进行判断
var score int = 90
switch {
case score > 90 :
fmt.Println("成绩优秀..")
case score >=70 && score <= 90 :
fmt.Println("成绩优良...")
case score >= 60 && score < 70 :
fmt.Println("成绩及格...")
default :
fmt.Println("不及格")
}
//switch 后也可以直接声明/定义一个变量,分号结束,不推荐
switch grade := 90; { // 在golang中,可以这样写
case grade > 90 :
fmt.Println("成绩优秀~..")
case grade >=70 && grade <= 90 :
fmt.Println("成绩优良~...")
case grade >= 60 && grade < 70 :
fmt.Println("成绩及格~...")
default :
fmt.Println("不及格~")
}
//switch 的穿透 fallthrought
var num int = 10
switch num {
case 10:
fmt.Println("ok1")
fallthrough //默认只能穿透一层
case 20:
fmt.Println("ok2")
fallthrough
case 30:
fmt.Println("ok3")
default:
fmt.Println("没有匹配到..")
}
}
demo4
package main
import "fmt"
func main(){
//使用while方式输出10句 "hello,world"
//循环变量初始化
var i int = 1
for {
if i > 10 { //循环条件
break // 跳出for循环,结束for循环
}
fmt.Println("hello,world", i)
i++ //循环变量的迭代
}
fmt.Println("i=", i)
//使用的do...while实现完成输出10句”hello,ok“
var j int = 1
for {
fmt.Println("hello,ok", j)
j++ //循环变量的迭代
if j > 10 {
break //break 就是跳出for循环
}
}
}
package main
import (
"fmt"
)
func main() {
var n int = 30
//演示goto的使用
fmt.Println("ok1")
if n > 20 {
goto label1
}
fmt.Println("ok2")
fmt.Println("ok3")
fmt.Println("ok4")
label1:
fmt.Println("ok5")
fmt.Println("ok6")
fmt.Println("ok7")
//var n int = 30
演示return的使用
//fmt.Println("ok1")
//if n > 20 {
// return
//}
//fmt.Println("ok2")
//fmt.Println("ok3")
//fmt.Println("ok4")
//fmt.Println("ok5")
//fmt.Println("ok6")
//fmt.Println("ok7")
}
demo5
package main
import (
"fmt"
)
func main() {
//输出10句 "你好,尚硅谷"
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
// fmt.Println("你好,尚硅谷")
//golang中,有循环控制语句来处理循环的执行某段代码的方法->for循环
//for循环快速入门
for i := 1; i <= 10; i++ {
fmt.Println("你好,尚硅谷", i)
}
//for循环的第二种写法
j := 1 //循环变量初始化
for j <= 10 { //循环条件
fmt.Println("你好,尚硅谷~", j)
j++ //循环变量迭代
}
//for循环的第三种写法, 这种写法通常会配合break使用
k := 1
for { // 这里也等价 for ; ; {
if k <= 10 {
fmt.Println("ok~~", k)
} else {
break //break就是跳出这个for循环
}
k++
}
//字符串遍历方式1-传统方式
// var str string = "hello,world!北京"
// for i := 0; i < len(str); i++ {
// fmt.Printf("%c \n", str[i]) //使用到下标...
// }
//字符串遍历方式1-传统方式
var str string = "hello,world!北京"
str2 := []rune(str) // 就是把 str 转成 []rune
for i := 0; i < len(str2); i++ {
fmt.Printf("%c \n", str2[i]) //使用到下标...
}
fmt.Println()
//字符串遍历方式2-for-range
str = "abc~ok上海"
for index, val := range str {
fmt.Printf("index=%d, val=%c \n", index, val)
}
}
demo6
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
//我们为了生成一个随机数,还需要个rand设置一个种子.
//time.Now().Unix() : 返回一个从1970:01:01 的0时0分0秒到现在的秒数
//rand.Seed(time.Now().Unix())
//如何随机的生成1-100整数
//n := rand.Intn(100) + 1 // [0 100)
//fmt.Println(n)
//随机生成1-100的一个数,直到生成了99这个数,看看你一共用了几次
//分析思路:
//编写一个无限循环的控制,然后不停的随机生成数,当生成了99时,就退出这个无限循环==》break
var count int = 0
for {
rand.Seed(time.Now().UnixNano())
n := rand.Intn(100) + 1
fmt.Println("n=", n)
count++
if (n == 99) {
break //表示跳出for循环
}
}
fmt.Println("生成 99 一共使用了 ", count)
//这里演示一下指定标签的形式来使用 break
lable2:
for i := 0; i < 4; i++ {
//lable1: // 设置一个标签
for j := 0; j < 10; j++ {
if j == 2 {
//break // break 默认会跳出最近的for循环
//break lable1
break lable2 // j=0 j=1
}
fmt.Println("j=", j)
}
}
}
demo7
package main
import "fmt"
func main() {
//continue案例
//这里演示一下指定标签的形式来使用
//lable2:
// for i := 0; i < 4; i++ {
// //lable1: // 设置一个标签
// for j := 0; j < 10; j++ {
// if j == 2 {
// continue
// }
// fmt.Println("j=", j)
// }
// }
here:
for i := 0; i < 2; i++ {
for j := 1; j < 4; j++ {
if j == 2 {
continue here
}
fmt.Println("i=", i, "j=", j)
}
}
}