Go 语言流程控制详解:if / switch / for
运算符
对于这个运算符的章节来说每个语言都是差不多的
这里都是和C++进行比较学习,有两个点需要进行注意
go语言中的++ 和 -- 是属于语句而不是表达式
//错误代码package main
import "fmt"func main(){a := 1fmt.Println("a:", a++)
}
C/C++中的++或者--是表达式而go语言中的++ 和 --是语句,因此go中是不分前置++和后置++ 的。
流程控制
分支结构
if 语句
go 语言中if 语句的几点注意事项
package main
import "fmt"func main(){a := 1//fmt.Println("a:", a++)if b := 1; b>=a{fmt.Println("成功进行if语句啦")}
}
- if 后面的判断语句是可以不使用使用括号括起来的,也建议这样使用
- if 语句后面的判断语句可以进行假如变量的定义,但是和判断语句之间一定要通过 分号 进行间隔
- if 语句和判断语句之间一定要通过空格进行间隔
swich 语句
func testSwich(){var a intfmt.Scanln(&a)switch a/10{case 9,10:fmt.Println("你的成绩等级为A")case 8:fmt.Println("你的成绩等级为B")case 7:fmt.Println("你的成绩等级为C")case 6:fmt.Println("你的成绩等级为D")default:fmt.Println("你的成绩等级为E")}
}
几点注意事项
switch 后面必须是一个表达式(即常量值、变量或者一个有返回值的函数)
case 后面如果是常量值,则要求每个case 后面的常量值不能进行重复,并且类型还要和swithc 后面的表达式的类型相同
default 不是必须要写的,如果要写的话位置也可以随意,并不是要求到最后
case 后面也可以跟多个值,每个值之间用逗号进行间隔
case 后面也不需要进行带break,这个工作相当于golang 直接帮我们做了
如果想要进行进行执行没有break的效果,则需要进行执行switch穿透,使用fallthrough,这样则还会进行执行到使用fallthrough关键字的case的下一个case
另外
switch 后面也可以不跟表达式,这时候是当if语句来使用
func test(){
//直接当if语句来使用var b intfmt.Scanln(&b)switch {case b>90:fmt.Println("你的成绩等级为A")case b>80:fmt.Println("你的成绩等级为B")case b>70:fmt.Println("你的成绩等级为C")case b>60:fmt.Println("你的成绩等级为D")default:fmt.Println("你的成绩等级为E")}}
循环结构
go 语言中是没有while循环的,循环只有for循环
for 循环
go 语言中for循环的格式是非常灵活的
func testFor(){for i:=0;i<10;i++ {fmt.Println("i:",i)}j := 10for j<20{fmt.Println("j:",j)j++}
}
go 语言中的死循环
//死循环for ; ; {fmt.Println("我正在循环...")}
键值循环
for range 结构是go语言中特有的迭代结构,在许多条件下特别有用,可以进行遍历数组、切片、字符串、map以及通道,for range 这个语法类似于C++中的范围for
range 返回的第一个参数是下标,第二个参数才是遍历的值
s := "hello golang"
//遍历字符串有两种方式
//1.
for i:=0;i<len(s);i++{fmt.Printf("%c \n",s[i])
}
//2.
for i, value := range s{fmt.Printf("%d,%c \n",i,value)
}