the-way-to-go(二)

控制结构

if-else

// 常规写法
if condition1 {
    // do something 
} else if condition2 {
    // do something else    
} else {
    // catch-all or default
}

// 支持初始化的格式
if initialization; condition {
    // do something
}

即使当代码块之间只有一条语句时,大括号也不可被省略

当 if 结构内有 break、continue、goto 或者 return 语句时,Go 代码的常见写法是省略 else 部分

函数多返回值

Go 语言的函数经常使用两个返回值来表示执行是否成功: (也称为comma,ok 模式

  • 返回某个值以及 true 表示成功;
  • 返回零值(或 nil)和 false 表示失败
if comma, err := process(); err != nil {
    // todo
}

switch

// 第一种(候选值或能产生候选值的初始化语句)
switch var1|initialization {
    case val1:
        ...
    case val2, val3, val4:
        ...
    default:
        ...
}
// 第二种
// 任何支持进行相等判断的类型都可以作为测试表达式的条件,包括 int、string、指针等
switch {
    case condition1:
        ...
    case condition2:
        ...
    default:
        ...
}

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值

可以同时测试多个可能符合条件的值,使用逗号分割

不需要特别使用 break 语句来表示结束

如果在执行完每个分支的代码后,还希望继续执行后续分支的代码,可以使用 fallthrough 关键字来实现

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

可以使用 return 语句来提前结束代码块的执行

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型

for

基于计数器

for init; condition; post { }
// for i := 0; i < 10; i++ {}  倒序也可以

特别注意,永远不要在循环体内修改计数器

可以在循环中同时使用多个计数器

循环嵌套

ASCII 编码的字符占用 1 个字节,既每个索引都指向不同的字符,而非 ASCII 编码的字符(占有 2 到 4 个字节)不能单纯地使用索引来判断是否为同一个字符

基于条件判断

for condition { }

无限循环

for { }
// 需要使用 break 或 return 跳出循环

经典应用是服务器,用于不断等待和接受新的请求

for-range

可以迭代任何一个集合(包括数组、map、切片)

for ix, val := range coll { }

break & continue

break 的作用范围为该语句出现后的最内部的结构,它可以被用于任何形式的 for 循环(计数器、条件判断等)

continue 忽略剩余的循环体而直接进入下一次循环的过程,但不是无条件执行下一次循环,执行之前依旧需要满足循环的判断条件

continue 只能被用于 for 循环中

标签 & goto

for、switch 或 select 语句都可以配合标签(label)形式的标识符使用,即某一行第一个以冒号(:)结尾的单词

标签的名称是大小写敏感的,为了提升可读性,一般建议使用全部大写字母

LABEL1:
	for i := 0; i < 6; i++ {
        // todo 嵌套循环时用的比较多
        // contiune LABEL1
        // break LABEL1
    }

不建议使用 goto

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值