1、条件语句
if-else条件语句
- if - else
- if - else if - else
注意:
- Go语言是强类型语言,因此条件表达式的值只能是布尔类型
- Go编译器,对于
{和}的位置有严格的要求,它要求 else if (或 else)和 两边的花括号,必须在同一行。 - if 里可以允许先运行一个表达式,取得变量后,再对其进行判断
import "fmt"
func main() {
score := 80
//普通写法
if score > 90 {
fmt.Println("成绩为A")
} else if score >75 {
fmt.Println("成绩为B")
} else if score >60 {
fmt.Println("成绩为C")
} else {
fmt.Println("成绩不及格")
}
//多个表达式写法
if num := 100;num % 2 == 0 {
fmt.Println("偶数")
}
}
switch-case条件语句
注意:
- switch-case-default中,执行完相应case后会自动跳出,如果没有相应case可以处理,则执行default语句
- 一个case可以合并多个条件
- switch后面可接变量、表达式、函数
- switch后面可以不加变量或表达式或函数,相当于if - else if - else
- 当 case 使用关键字 fallthrough 开启穿透能力,可以直接执行下一个case的语句
- fallthrough到下一个case块时,不执行case匹配检查!
import "fmt"
func main() {
//示例1
education := "本科"
switch education {
case "博士":
fmt.Println("我是博士")
case "研究生":
fmt.Println("我是研究生")
case "本科":
fmt.Println("我是本科生")
case "大专":
fmt.Println("我是大专生")
case "高中":
fmt.Println("我是高中生")
default:
fmt.Println("高中以下学历~")
}
//示例2
month := 2
switch month {
case 3, 4, 5:
fmt.Println("春天")
case 6, 7, 8:
fmt.Println("夏天")
case 9, 10, 11:
fmt.Println("秋天")
case 12, 1, 2:
fmt.Println("冬天")
default:
fmt.Println("输入有误...")
}
//示例3
chinese := 80
english := 50
math := 100
switch getResult(chinese, english, math) {
case true:
fmt.Println("该同学所有成绩都合格")
case false:
fmt.Println("该同学有挂科记录")
}
//示例4
//该段执行结果是输出 hello和xxxx
s := "hello"
switch {
case s == "hello":
fmt.Println("hello")
fallthrough
case s == "xxxx":
fmt.Println("xxxx")
case s != "world":
fmt.Println("world")
}
}
// 判断一个同学是否有挂科记录的函数
// 返回值是布尔类型
func getResult(args ...int) bool {
for _, i := range args {
if i < 60 {
return false
}
}
return true
}
2、循环语句
for语句
- Go中,循环语句只有for,没有while,但是for可以实现while的功能
- for 后面,可以接四种类型的表达式。
- 接一个条件表达式
- 接三个表达
- 接一个 range 表达式
- 不接表达式
import "fmt"
func main() {
//示例1
num := 1
for num <= 5 {
fmt.Println(num)
num++
}
//示例2
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
//示例3,for range用于遍历可迭代对象,如数组、切片、字符串等
myarr := [...]string{"world", "python", "go"}
for _, item := range myarr {
fmt.Printf("hello, %s\n", item)
}
//示例4
var i int = 1
for {
if i > 5 {
break
}
fmt.Printf("hello, %d\n", i)
i++
}
}
3、跳转语句
goto语句
- go语言中,利用goto实现无条件跳转语句
- goto语句与标签之间
不能有变量声明,否则编译错误
import "fmt"
func main() {
//示例1:使用方法
goto flag
fmt.Println("hello")
flag:
fmt.Println("world")
//示例2:实现for功能
i := 1
flag:
if i <= 5 {
fmt.Println(i)
i++
goto flag
}
//示例3:实现break功能
i = 1
for {
if i > 5 {
goto flag
}
fmt.Println(i)
i++
}
flag:
//示例4:实现continue功能
i = 1
flag:
for i <= 10 {
if i%2 == 1 {
i++
goto flag
}
fmt.Println(i)
i++
}
}
break语句
- break语句可以用于跳出当前循环或者跳出对应标签所在的循环
package main
import (
"fmt"
)
func main() {
//示例1:跳出当前循环
for i := 0; i < 10; i++ {
if i > 5 {
break //终止这个循环,只打印0到5
}
fmt.Println(i)
}
//示例2:跳出到标签所在的循环
J:
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 6 {
break J //现在终止的是j 循环,而不是i的那个
}
fmt.Println(i)
}
}
}
continue语句
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
if i < 6 {
continue //如果i<6,忽略本次循环,继续下一次迭代
}
fmt.Println(i)
}
}
4、延迟语句
defer延迟语句
- defer关键字是go语言独有的关键字
- defer语句可以延迟到所在函数执行完后再执行
- defer语句在return之后调用
- defer可以给程序做一个快照
- 多个defer执行时,是逆序执行的
import "fmt"
func main() {
//示例1
//该实例的输出结果是:
//java
//python
//go
name := "go"
defer fmt.Println(name) // 输出: go
name = "python"
defer fmt.Println(name) // 输出: python
name = "java"
fmt.Println(name) //输出:java
}
验证defer在return之后执行
import "fmt"
var name string = "go"
func myfunc() string {
defer func() {
name = "python"
}()
fmt.Printf("myfunc 函数里的name:%s\n", name)
return name
}
func main() {
myname := myfunc()
fmt.Printf("main 函数里的name: %s\n", name)
fmt.Println("main 函数里的myname: ", myname)
}