go语言之控制结构1

https://learnku.com/docs/the-way-to-go/switch-structure/3594 参考这个网站学习的

1.if-else结构

        if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码。

if condition {
    // do something 
}

        如果存在第二个分支,则可以在上面代码的基础上添加 else 关键字以及另一代码块,这个代码块中的代码只有在条件不满足时才会执行。if 和 else 后的两个代码块是相互独立的分支,只可能执行其中一个。

if condition {
    // do something 
} else {
    // do something 
}

        else-if 分支的数量是没有限制的,但是为了代码的可读性,还是不要在 if 后面加入太多的 else-if 结构。如果你必须使用这种形式,则把尽可能先满足的条件放在前面。

当 if 结构内有 break、continue、goto 或者 return 语句时,Go 代码的常见写法是省略 else 部分,无论满足哪个条件都会返回 x 或者 y 时,一般使用以下写法:

if condition {
    return x
}
return y

举例:

        1.1 判断字符串是否为空

  if str == “” {...}    if len(str) == 0 {...}

package main

import (
	"fmt"
)

func main() {
	var c string = "abc"
	if c == "" {
		fmt.Printf("The str is null\n")
	} else {
		fmt.Printf("The value is not null\n")
	}
}

The value is not null

        1.2 函数 Abs() 用于返回一个整型数字的绝对值

func Abs(x int) int {
    if x < 0 {
        return -x
    }
    return x    
}

        1.3 isGreater 用于比较两个整型数字的大小:

func isGreater(x, y int) bool {
    if x > y {
        return true 
    }
    return false
}

        2. switch 结构

表达式1为:

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

        变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。前花括号 { 必须和 switch 关键字在同一行。

        您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

        每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。( Go 语言使用快速的查找算法来测试 switch 条件与 case 分支的匹配情况,直到算法匹配到某个 case 或者进入 default 条件为止。)

        一旦成功地匹配到某个分支,在执行完相应代码后就会退出整个 switch 代码块,也就是说您不需要特别使用 break 语句来表示结束。

        因此,程序也不会自动地去执行下一个分支的代码。如果在执行完每个分支的代码后,还希望继续执行后续分支的代码,可以使用 fallthrough 关键字来达到目的

        因此:

switch i {
    case 0: // 空分支,只有当 i == 0 时才会进入分支
    case 1:
        f() // 当 i == 0 时函数不会被调用
}

switch i {
    case 0: fallthrough
    case 1:
        f() // 当 i == 0 时函数也会被调用
}

其实只用看这个例子就懂了switch的功能

package main

import "fmt"

func main() {
	var a int = 108

	switch a {
	case 98, 99:
		fmt.Println("It's equal to 98")
	case 100:
		fmt.Println("It's equal to 100")
	default:
		fmt.Println("It's not equal to 98 or 100")
	}
}

It's not equal to 98 or 100

表达式2为:

switch {
    case condition1:
        ...
    case condition2:
        ...
    default:
        ...
}

例子:

package main

import "fmt"

func main() {
	var a int = 15

	switch {
	case a < 10:
		fmt.Println("a < 10")
	case a > 20:

		fmt.Println("a > 20")
	default:

		fmt.Println("10 < a <20")
	}
}

10 < a <20

表达式3:

switch initialization {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

例子:

switch a, b := x[i], y[j]; {
    case a < b: t = -1
    case a == b: t = 0
    case a > b: t = 1
}

练习题:

写一个 Season 函数,要求接受一个代表月份的数字,然后返回所代表月份所在季节的名称(不用考虑月份的日期)。

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	a := rand.Intn(13)
	print(a)
	switch a {
	case 12, 1, 2:
		fmt.Print("Winter")
	case 3, 4, 5:
		fmt.Print("Spring")
	case 6, 7, 8:
		fmt.Print("Summer")
	case 9, 10, 11:
		fmt.Print("Autumn")
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值