美文网首页
Golang学习摘录二:控制语句

Golang学习摘录二:控制语句

作者: Mage | 来源:发表于2017-02-13 11:29 被阅读12次

    if语句

    i f x > 0 {   // {是强制的,且必须和if在同一行
     return y
    } else {
     return x
    }
    

    if 和 switch 接受初始化语句,通常用于设置一个(局部)变量。

    if err := Chmod(0664); err != nil { //nil 与 C 的 NULL 类似
    fmt.Printf(err)  //err 的作用域被限定在 if 内
    return err
    }
    

    goto语句

    用 goto 跳转到一定是当前函数内定义的标签

    func myfunc() { 
            i := 0
     Here:     // 这行的第一个词,以分号结束作为标签,标签名区分大小写
            println(i)
            i++
            goto Here   // 跳转
    }
    

    for语句

    Go 的 for 循环有三种形式,只有其中的一种使用分号。

    for init; condition; post { } // 和C的for一样
    for condition {}              // 和while一样
    for {}                        // 死循环
    
    1、
    sum := 0
    for i:=0; i<10; i++ {
    sum+=i ←sum = sum + i 的简化写法 } 
    2、
    for i,j:=0, len(a)-1; i<j; i,j=i+1,j-1 {
    a[i], a[j] = a[j], a[i] //平行赋值 
    }
    

    break和continue

    利用 break 可以提前退出循环,break 终止当前的循环。

    for i:=0; i<10; i++ { 
      if i>5{
          break //终止这个循环,只打印 0 到 5
       }
       println(i)
    }
    

    循环嵌套循环时,可以在 break 后指定标签。用标签决定哪个循环被终止:

    J: for j:=0; j<5; j++ {
        for i:=0; i<10; i++ {
           if i>5{ 
              break J // 现在种植的是j循环,而不是i的那个
            }
            println(i)
          } 
    }
    

    利用 continue 让循环进入下一个迭代,而略过剩下的所有代码。下面循环打印了 0 到 5。

    
    for i:=0; i<10; i++ { 
        if i>5{
            continue // 跳过循环中所有的代码println(i)
        }
        println(i)
    }
    

    range

    range可用于循环,支持slice、array、string、map和channel,range 是个迭代器,当被调用的时候,从它循环的内容中返回一个键值对。基于 不同的内容,range 返回不同的东西。

    // 遍历array
    list := []string {"a", "b", "c", "d", "e", "f"}
     for k, v := range list { 
      // k,v键值对:k为key,v为value
    }
    // 遍历字符串
    for pos, char := range "aΦx" {
    fmt.Printf("character '%c' starts at byte position %d\n",char, pos)
    }
    

    switch语句

    Go 的 switch 非常灵活。表达式不必是常量或整数,执行的过程从上至下,直到找到匹 配项,而如果 switch 没有表达式,它会匹配 true 。这产生一种可能——使用 switch 编写 if-else-if-else 判断序列。

    func unhex(c byte) byte { 
      switch {
        case '0'<=c&&c<='9': return c - '0'
        case 'a'<=c&&c<='f': return c - 'a' + 10
        case 'A'<=c&&c<='F': return c - 'A' + 10
      }
      return 0
     }
    

    它不会匹配失败后自动向下尝试,但是可以使用 fallthrough 使其这样做。没 有 fallthrough:

    switch i {
     case 0:  // 空的case体
    case 1: 
                f() // 当i==0时,f不会被调用!
    }
    

    而这样:

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

    用 default 可以指定当其他所有分支都不匹配的时候的行为。

    switch i { 
      case 0: 
      case 1: 
             f()
      default:
             g() //当i不等于0或1时调用
    }
    

    分支可以使用逗号分隔的列表。

    func shouldEscape(c byte) bool { 
        switch c {
          case ' ', '?', '&', '=', '#', '+':    // ,或者 “or”都可以
                        return true
        }
      return false
    }
    

    使用 switch 对字节数组进行比较的例子:

    func Compare(a, b []byte) int {
        for i:=0; i< len(a)&&i< len(b); i++ {
          switch {
            case a[i] > b[i]:
              return 1
            case a[i] < b[i]:
              return -1
            }
        }
          switch { 1
            case len(a) < len(b):
              return -1
            case len(a) > len(b):
              return 1 
           }
      return 0
    }
    

    相关文章

      网友评论

          本文标题:Golang学习摘录二:控制语句

          本文链接:https://www.haomeiwen.com/subject/fbipittx.html