Go 结构化编程 条件和循环

循环


与其他主要编程语⾔的差异
Go 语⾔仅⽀持循环关键字 for(go语言的关键字非常的少,和c的37个,c++的84个相比只有25个关键字,所以 go语言的循环只支持for关键字
for  j := 7 ; j <= 9 ; j ++ 

	n := 0

	for n < 5 {
		fmt.Println(n)
		n ++
	}

 

if 条件


 condition是一个布尔表达式

if  condition {
    // code to be executed if condition is true
} else {
    // code to be executed if condition is false
}
if  condition-1 {
    // code to be executed if condition-1 is true
} else if condition-2 {
    // code to be executed if condition-2 is true
} else {
    // code to be executed if both condition1 and condition2 are false
}

与其他主要编程语⾔的差异

  1. condition 表达式结果必须为布尔值
  2.  ⽀持变量赋值:
if  var declaration;  condition {
    // code to be executed if condition is true
}

这里有函数的多返回值,这里可以给到变量,通过变量结果来做判断 

	a := func(x,y int)int {
		return x + y
	}

	if b := a(1,6) > 5;b{
		fmt.Println("yes")
	} else{
		println("no")
	}

优化一下,一般调用某个方法的时候,第一个变量v是本身方法的返回值,第二个是返回的错误,如果没有错误执行什么样的操作,有错误执行什么样的操作。

	a := func(x,y int) (int,error) {
		if x < 0 || y < 0 {
			return 0,errors.New("a <0 || b < 0")
		}
		return x + y,nil
	}

	if v,err := a(1,6); err == nil {
		fmt.Println(v)
	} else{
		println(err)
	}

switch 条件


与其他主要编程语⾔的差异

1. 条件表达式 不限制为常量或者整数
2. 单个 case 中, 可以出现多个结果选项, 使⽤逗号分隔; (case当中可以放多个元素,当命中其中任何一个时候)
3. C 语⾔等规则相反, Go 语⾔不需要⽤break来明确退出⼀个 case ;(不需要添加break,在一个case被命中之后自动的退出,中断这个结果)
4. 可以不设定 switch 之后的条件表达式,在此种情况下,整个switch结构与多个 if…else… 的逻辑作⽤等同
	for i:=0;i<=5;i++{
		switch i {
		case 0,2 :
			fmt.Println(i,"Even")
		case 1,3:
			fmt.Println(i,"Odd")
		default:
			fmt.Println(i,"it not 0-3")
		}
	}


0 Even
1 Odd
2 Even
3 Odd
4 it not 0-3
5 it not 0-3

如果把switch语句当成连续的if else,那么可以通过switch简化复杂连续的if else。

注意⚠️switch i,这个时候就不需要在switch之后加变量i了,可以在case后面做判断表达。

	for i:=0;i<=5;i++{
		switch  {
		case i%2 == 0 :
			fmt.Println(i,"Even")
		case i%2 == 1 :
			fmt.Println(i,"Odd")
		default:
			fmt.Println(i,"unknow")
		}
	}

if 条件语句比较适合分支较少的情况,如果有很多分支的话,选择 switch 会更方便,比如以上示例,使用 switch 改造后的代码如下:

switch i:=6;{

case i>10:

    fmt.Println("i>10")

case i>5 && i<=10:

    fmt.Println("5<i<=10")

default:

    fmt.Println("i<=5")

}

switch 语句同样也可以用一个简单的语句来做初始化同样也是用分号 ; 分隔。每一个 case 就是一个分支,分支条件为 true 该分支才会执行,而且 case 分支后的条件表达式也不用小括号 () 包裹。

在 Go 语言中,switch 的 case 从上到下逐一进行判断,一旦满足条件,立即执行对应的分支并返回,其余分支不再做判断。也就是说 Go 语言的 switch 在默认情况下,case 最后自带 break。这和其他编程语言不一样,比如 C 语言在 case 分支里必须要有明确的 break 才能退出一个 case。Go 语言的这种设计就是为了防止忘记写 break 时,下一个 case 被执行。 

switch j:=1;j {

case 1:

    fallthrough

case 2:

    fmt.Println("1")

default:

    fmt.Println("没有匹配")

}

当 switch 之后有表达式时,case 后的值就要和这个表达式的结果类型相同,比如这里的 j 是 int 类型,那么 case 后就只能使用 int 类型,如示例中的 case 1、case 2。如果是其他类型,比如使用 case "a" ,会提示类型不匹配,无法编译通过。

而对于 switch 后省略表达式的情况,整个 switch 结构就和 if……else 条件语句等同了。

switch 后的表达式也没有太多限制,是一个合法的表达式即可,也不用一定要求是常量或者整数。你甚至可以像如下代码一样,直接把比较表达式放在 switch 之后。

switch 2>1 {

case true:

    fmt.Println("2>1")

case false:

    fmt.Println("2<=1")

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值