流程控制
流程控制编程语言都差不多,单双分支、循环啥的,具体细节具体细说。
单双分支中python于go基本相同
func main() {
// golang支持在if中直接定义变量
if age := 20 ; age > 18 {
fmt.Println("成年就爬")
}
// golang中else不能再下一行出现
if age > 18 {
fmt.Println("成年就爬")
} else {
fmt.Println("未成年也爬")
}
//多分支不同于python的是,golang没有elif语句
if age > 18 {
fmt.Println("成年就爬")
} else if age > 16{
fmt.Println("小青年也爬")
} else {
fmt.Println("未成年也爬")
}
}
对于switch分支,python可以用字典实现,所以python转go的小伙伴可以学习一下,go还有一个与其他编程语言java等不同的是:
- switch后面不用加break,默认匹配后退出;
- case后可以带多个表达式;
- case后如果是常量,是不能重复的
- switch后可以不带表达式,类似if-else
- switch穿透 - fallthrough,case语句后增加fallthrough,则会继续执行下一个case
func main() {
var n int = 10
var num int
fmt.Printf("请输入1-7中的数字:")
fmt.Scanln(&num)
switch num {
case 1: fmt.Println("周一")
fallthrough // 继续执行
case 2: fmt.Println("周二")
case 3: fmt.Println("周三")
case 4: fmt.Println("周四")
case 5: fmt.Println("周五")
case 6: fmt.Println("周六")
case 7: fmt.Println("周天")
//case 7: fmt.Println("周末") //常量不能重复
case 8,9,n: fmt.Println("彳亍") // case后可带变量
case num < 0: fmt.Println("负数是我没想到的")
default:
fmt.Println("让你输数字,李在赣神魔")
}
}
for循环:没啥区别,和c很像,(go没有while循环)
func main() {
// 第一种写法
for i:=1;i<=10;i++ {
fmt.Println(i)
}
// 第二种写法
j := 1
for j <= 10 {
fmt.Println(j)
j++
}
// 第三种写法(感觉很像while循环)
k := 1
for{
if k < 10 {
fmt.Println(k)
} else {
break // break跳出循环
}
k++
} // 等价与 for ;; {}
}
golang还提供了和python很像的for-range遍历方式:
func main() {
var str string = "hello,world!嘻嘻"
// for循环遍历
for i:=0;i<len(str);i++{
//fmt.Printf("%T\n",str[i])
fmt.Printf("%c",str[i]) // 这种方式遍历中文字符串是乱码(按照字节方式遍历)
}
// for-range遍历
for _,val := range str {
//fmt.Printf("%T,%T\n",val)
fmt.Printf("%c\n",val) // 这种方式可以遍历中文字符串(按照字符方式遍历)
}
}
golang中break语句在多层嵌套循环中,默认跳出最近的for循环,但可以通过标签来指明要终止哪一层的语句块
func main() {
label1:
for i:=0;i<4;i++ {
//label2:
for j:=0;j<10;j++{
if j == 2 {
//break
//break label2
break label1
}
fmt.Println("j = ",j)
}
}
}
golang中continue语句在多层嵌套循环中,可以通过标签来指明要跳过哪一层的语句块
func main() {
xixi: // 不一定非要写label这个词,只要能作为标识符都可以
for i:=0;i<4;i++ {
//haha:
for j:=0;j<10;j++{
if j == 2 {
//continue
continue xixi
//continue haha
}
fmt.Println("j = ",j)
}
}
}
goto语句:
- goto语句可以无条件地转移到程序中指定的行
- goto语句通常与条件语句配合使用,可以实现条件转移,跳出循环体等功能
有些人说goto语句很鸡肋,有些人又觉得很好用。大家自我感觉。
func main() {
fmt.Println("周一")
goto label //可以配合if语句使用
fmt.Println("周二")
fmt.Println("周三")
label:
fmt.Println("周四")
fmt.Println("周五")
fmt.Println("周六")
fmt.Println("周天")
}
//周一
//周四
//周五
//周六
//周天