Go语言之条件判断循环语句(if-else、switch-case、for、goto、break、continue)

一、if-else条件判断语句

  • Go中的if-else条件判断语句跟C++差不多。但是需要注意的是,Go中强制规定,关键字if和else之后的左边的花括号"{“必须和关键字在同一行,若使用了else if结构,则前段代码快的右花括号”}"必须和关键字else if在同一行。
  • Go和C++不同的是,条件判断语句不需要小括号"()"括起来
package main

import "fmt"

func main() {
	var num int = 100
	if num == 0{//{必须同一行
		fmt.Println("aaaaaa")
	}else if num == 10{//必须同一行
		fmt.Println("bbbbbb")
	}else if num == 100{
		fmt.Println("cccccc")
	}else{
		fmt.Println("eeeeeeee")
	}
}
  • 与C++不同的特殊写法,num:=10是一个语句,执行完之后,num==0才是判断表达式
    package main
    
    import "fmt"
    
    func main() {
    	
    	if num:=10; num==0 { //{必须同一行
    		fmt.Println("aaaaaa")
    	}
    }
    

二、switch-case语句

  • 与C++不同的是,在Go语言中,case是一个独立的代码块,执行完毕后并不会紧接着执行下一个case,所以不需要执行完一个case之后break;但是为了兼容一些移植代码,依然加入了fallthough关键字来实现执行完case语句之后紧接着执行下一个case语句。
package main

import (
	"fmt"
)

func main() {

	s := "hello"
	i := 15
	switch {
	case s == "hello":
		fmt.Println("hello")
		fallthrough
	case s == "world":
		fmt.Println("world")
		fallthrough//强行执行下个case语句
	case i >= 15 && i < 20://分支可以用表达式
		fmt.Println("!!!!呀呀呀")
	default:
		fmt.Println("bbbbb")
	}

	str2 := "math"
	switch  str2{
	case "hhhh","math"://一个分支可以对应多个值
		fmt.Println("math")
		fallthrough
	case "aaaaa":
		fmt.Println("math222")
	case "cccc":
		fmt.Println("math333333")
		fallthrough
	default:
		fmt.Println("qqqqqqq")
	}
}

结果:在这里插入图片描述

三、for循环语句

  • 与C++不同,Go语言中的循环语句只支持for关键字,并不支持while和do-while结构

  • 例子:

    package main
    
    import "fmt"
    
    func main() {
    	for i:= 0; i < 10; i++{
    		fmt.Printf(" %d ",i)
    	}
    }
    

    结果:在这里插入图片描述

  • for的初始语句可以被忽略

  • for的条件表达式也可以被忽略

  • for只有一个条件的循环

    package main
    
    import "fmt"
    
    func main() {
    	//1.忽略for的初始语句
    	i := 0
    	for ; i<10 ; i++{
    		fmt.Printf(" %d ",i)
    	}
    
    	fmt.Println()
        //2.忽略for的条件表达式
        for j:=0; ;j++{
    	    if j > 10{
    		    break
    	    }
    	   fmt.Printf(" %d ",j)
        }
    
        fmt.Println()
        //3.for忽略第三条语句
        for j:=0;j<10; {
    	    fmt.Printf(" %d ",j)
    	    j++
        }
    
        fmt.Println()
        //4.for只有一个条件的循环
        var k int=0
        for k <= 10{
    	    fmt.Printf(" %d ",k)
    	    k++
        }
    }
    

    结果:在这里插入图片描述

  • for也可以无限循环

    package main
    
    import "fmt"
    
    func main() {
    	//4.for实现无限循环
    	for ; ; {
    		fmt.Printf("aaa")
    
    	}
    }
    

四、goto/break/continue跳出循环

1.goto

  • goto关键字是跳出多层循环,跳转到循环外面,执行标签内的语句
package main

import "fmt"

func main() {
	for i:=0; i<10; i++{
		for j:=0; j<10; j++{
			fmt.Printf(" i:%d ", i)
			fmt.Printf(" j:%d ", j)
			if j==3{
				goto goHereLa //跳出循环,跳转到标签语句
			}
		}
	}
	
	fmt.Println("\n不会到这噢,直接跳过,去goHereLa标签内")//不会打印
	return //手动返回,避免函数执行进入了标签代码中

goHereLa:
	fmt.Println("\nthere le la la la,到这啦")
}

结果:在这里插入图片描述

2.break

  • break和goto一样,可以跟上标签,但是表示退出某个标签对应的代码块,标签要求必须定义在对应for, switch和select代码块上方
package main

import "fmt"

func main() {

goHereLa:
	for i:=0; i<10; i++{
		for j:=0; j<10; j++{
			fmt.Printf(" i:%d ", i)
			fmt.Printf(" j:%d ", j)
			if j==3{
				break goHereLa //跳出标签goHereLa里的代码块。即跳出循环外
			}
		}
	}
	fmt.Println("\n到这啦,循环语句外面")//会打印
}

结果:
在这里插入图片描述

3.continue

  • Go中的continue和C++中并没有什么不一样,都是跳出本次循环继续下次循环。但是多加了一个功能,即也可以像break一样加上标签,表示开始标签对应的循环,并仅限于for循环中使用
package main

import "fmt"

func main() {
goHereLa:
	for i:=0; i<5; i++{
		fmt.Printf("\n i:%d ", i)
		for j:=0; j<10; j++{
			fmt.Printf(" j:%d ", j)
			if j==3{
				continue goHereLa //跳出标签goHereLa里的代码块。即跳出本次循环,继续下次循环
			}
			fmt.Println("当j是3之后不会打这个噢,直接跳出本次循环啦")
		}
	}
	fmt.Println("\n到这啦,循环语句外面")
}

结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值