zoukankan      html  css  js  c++  java
  • Go基本语句

    递增递减语句
    在GO中,++与--是作为语句而并不是作为表达式

    package main
    import  "fmt"
    func main() {
            a:=1    
            //a=a++   //语句而非表达式,只能放左边,go里不支持
            a++
            fmt.Println(a)  
    }

    判断语句if
    条件表达式没有括号,块需加花括号 即使只有一行
    支持一个(只支持1个)初始化表达式(可以是并行方式)
    左大括号必须和条件语句或者else在同一行
    支持单行模式
    初始化语句中的变量为block级别,同时隐藏外部同名变量

    package main
    import  "fmt"
    func main() {
            a:=10
            if a,b:=2,3; a<b {           //左大扩号必须和if同行  if a:=2,b:=3; a<b写法错误,只支持1个初始化表达式
                    fmt.Println(a)  //
            } 
            fmt.Println(a) //只在if语句块里有值 10   
            fmt.Println(b)  //undefined: b 
    }

    循环语句for
    GO只有for一个循环语句关键字,但支持3种形式
    初始化和步进表达式可以是多个值
    条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好条件并以变量或常量代替
    左大括号必须和条件语句在同一行(格式化)
    第一种形式

    package main
    import  "fmt"
    func main() {
         a:=0
         for{
            a++
            if a>10{
                    break
            }
            fmt.Println(a)
            
         }   
    }

    第二种形式

    func main() {
         a:=0
         for a<10{
            a++
            fmt.Println(a)
         }   
    }

    第三种形式

    func main() {
         for a:=0;a<10;a++{
            fmt.Println(a)
         }   
    }

    注意

    func main() {
            s:="abcd"
         for a:=0;a<len(s);a++{  //每次循环 都会执行len(s) 建议赋值给变量再放在for判断表达式里
            fmt.Println(a)
         }   
    }

    分支选择 switch语句
    可以使用任何类型或表达式作为条件语句
    不需要写break,一旦条件符合自动终止
    如希望继续执行下一个case,需使用fallthrough语句
    支持一个初始化表达式(可以是并行式),右侧需跟分号
    左大括号必须和条件语句在同一行

    func main() {
            a:=1
            switch a{
            case 0:
                    fmt.Println("a=0")
            case 1:
                    fmt.Println("a=1")
                    fmt.Println("ok")
            default:
                    fmt.Println("default")
            } 
    }
    func main() {
            a:=1
            switch {
            case a>=0:
                    fmt.Println("a=0")
            case a>=1:
                    fmt.Println("a=1")
                    fmt.Println("ok")
            default:
                    fmt.Println("default")
            } 
    }
    //只输出a=0 自动break
    func main() {
            a:=1
            switch {
            case a>=0:
                    fmt.Println("a=0")
                    fallthrough
            case a>=1:
                    fmt.Println("a=1")
                    fmt.Println("ok")
                    fallthrough
            default:
                    fmt.Println("default")
            } 
    }
    /*
    输出
    a=0
    a=1
    ok
    default
    */
    func main() {
            switch a:=1; {
            case a>=0:
                    fmt.Println("a=0")
                    fallthrough
            case a>=1:
                    fmt.Println("a=1")
                    fmt.Println("ok")
                    fallthrough
            default:
                    fmt.Println("default")
            } 
            fmt.Println(a);// undefined: a
    }
    //输出结果同上

    跳转语句goto,break,continue
    三个语法都可以配合标签使用
    标签名区分大小写,若不使用会造成编译错误
    break与continue配合标签可用于多层循环的跳出
    goto是调整执行位置

    func main() {
      // LABEL1:
      for{
        for i:=0;i<10;i++{
          fmt.Println(i);
          if i>3{
            // break LABEL1
            goto LABEL2
          }
        }
      }
      LABEL2:
    }
    func main() {
      LABEL1:
      for i:=0;i<10;i++{
        for {
          continue LABEL1
          fmt.Println(i);
        }
        fmt.Println(i);
      }
      fmt.Println("ok!")
    }
    //只输出ok!
    func main() {
      LABEL1:
      for i:=0;i<10;i++{
        for{
          fmt.Println(i)
          continue LABEL1
        }
      }
    }
    //输出0-9
    
    //continue换成goto 会死循环输出0
  • 相关阅读:
    [fw]error: aggregate value used where an integer was expected
    [fw]awk求和
    [fw]谈EXPORT_SYMBOL使用
    [fw]用Kprobes调试(debug)内核
    [FW]使用kprobes查看内核内部信息
    linux缺頁異常處理--內核空間[v3.10]
    用C语言给指定的内存地址赋值(通过指针)
    [fw]Linux 的 time 指令
    how to prevent lowmemorykiller from killing processes
    Android成长日记-Noification实现状态栏通知
  • 原文地址:https://www.cnblogs.com/HKUI/p/4784128.html
Copyright © 2011-2022 走看看