if分支
if 布尔表达式1 {
/* 在布尔表达式1为true时执行 */
} else if 布尔表达式2 {
/* 在布尔表达式1为false且布尔表达式2为true时执行 */
} else {
/* 在上面两个布尔表达式都为false时执行 */
}
特殊的if语句
if 初始化语句;条件{
/* 执行代码 */
}
if num:=10;num%2==0{
fmt.println(num,"is even")
} else {
fmt.println(num,"is odd")
}
fmt.println(num)//编译器会报错,因为num变量已经出了if语句
注:若采用上述的特殊if语句,则该初始化的变量只能在if语句内使用,出了if语句使用回报错
switch分支语句
switch 变量名{
case 数值1:分支1
case 数值2:分支2
....
default:最后一个分支
}
num:=3
switch num{
case 1:fmt.println("第一季度")
case 2:fmt.println("第二季度")
case 3:fmt.println("第三季度")
case 4:fmt.println("第四季度")
default :fmt.println("输入有误")
}
//若num改为5,则跳到default语句
注:
1.switch可以作用在其他类型上,case后的数值必须和switch作用的变量类型一致
2.case是无序的
3.case后的数值是唯一的
4.default语句可有可没有
其他写法
1.省略switch后的变量,相当于直接作用在true上,匹配true类型的case语句
switch{
case true :fmt.println("true")
case false :fmt.println("false")
}
//结果输出true
2.case后可以跟随多个数值
switch 变量{
case 数值1,数值2,数值3... :
代码块
}
//case后的数值只需满足一个即可执行该语句
3.switch后也可以加初始化语句,初始化的变量只能作用于switch结构内
与if语句初始化语法类似
break:可以使用在switch语句,也可以使用在for循环中,用来强制结束case语句,进而结束switch分支
fallthrough:执行完一个case后紧跟着执行下一个case,用于穿透switch,应该位于某个case语句的最后一行
m:=2
switch m{
case 1:
fmt.println("第一季度")
case 2:
fmt.println("第二季度")
fallthrough
case 3:
fmt.println("第三季度")
case 4:
fmt.println("第四季度")
}
//结果会将第二季度和第三季度都打印出来
for循环
GO语言只有for循环
语法结构:
for init; condition; post { }
for 表达式1;表达式2(布尔类型);表达式3{
循环体
}
其他写法
省略表达式1和表达式3,只有一个条件判定
for condition { } //效果与while相似
同时省略三个表达式,相当于直接作用在true上,相当于while{true}
for { }
for循环中range格式可以对slice、map、数组、字符串等进行迭代循环
for key,value := range oldmap {
newmap[key] = value
}
练习
打印九九乘法表
package main
import "fmt"
func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d*%d=%d ", i, j, i*j)
}
fmt.Println()
}
}
break 和 continue
break:跳出循环
continue:结束本次循环,执行下一次循环
多层循环嵌套时,break和continue默认结束离他最近的循环体,要想结束指定的某个循环,则需要给循环贴上标签,然后break和continue后面加上该标签即可
for 表达式1;表达式2;表达式3{
for 表达式1;表达式2;表达式3{
break;//结束的是内层循环
continue;//结束的是内层循环
}
}
flag: for 表达式1;表达式2;表达式3{
for 表达式1;表达式2;表达式3{
break flag;//结束的是外层循环
continue flag;//结束的是外层循环
}
}
练习
打印2——100内的所有素数
package main
import (
"fmt"
"math"
)
// 素数:只能被1和 本身整除
func main() {
for i := 2; i <= 100; i++ {
flag := true //判断i是否是素数
for j := 2; j <= int(math.Sqrt(float64(i))); j++ {
if i%j == 0 {
flag = false
break
}
}
if flag {
fmt.Println(i)
}
}
}
goto语句:可以无条件的跳转到指定行
goto label :
…
…
label: statement;
err := firstcheckerror()
if err != nil{
goto onexit
}
err = secondchenkerror()
if err != nil{
goto onexit
}
fmt.println("done")
return
onexit:
fmt.println(err)
exitprocess()
生成随机数
伪随机数,根据一定的算法公式得出来的
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
/*step1:要想每次生成的随机数都不同的话,就要改变它的种子数
可以设置成时间戳, 因为时间是一直在变化的
*/
rand.Seed(time.Now().UnixNano()) //改变种子数
for i := 0; i < 10; i++ {
//step2:调用生成随机数的函数
fmt.Println(rand.Intn(100)) //Intn函数()里的参数n是默认生成[0,n)范围内的数
}
/*若是想要生成指定范围内的一个数则需要用到Intn()函数
[15,76]
[0,61]+15
[3,48]
[0,45]+3
*/
num := rand.Intn(46) + 3 //[3,48]
fmt.Println(num)
num1 := rand.Intn(62) + 15 //[15,76]
fmt.Println(num1)
}