• go基础笔记-程序流程控制


    单分支控制
    if 条件表达式 {
      执行代码块
    }
    
    案例:
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var age int = 19
        if age > 18 {
            fmt.Println("大于18")
        }
    }
    
    
    案例:声明两个float64型变量并赋值,判断如果第一个数大于10.0,并且第2个数小于20.0,就打印两个数之和。
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var n3 float64 = 11.0
        var n4 float64 = 17.0
        if n3 > 10.0 && n4 < 20.0 {
            fmt.Println("和=",(n3+n4))
        }
    }
    
    
    案例:判断一个年份是否是闰年,闰年的判断条件是符合下面二者之一:
    (1)年份能被4整除,但不能被100整除;
    (2)年份能被400整除。
    
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var year int = 2020
        if (year % 4 == 0 && year % 100 !=0 ) || year % 400 == 0{
            fmt.Println(year,"是闰年")
        }
    }
    
    
    双分支控制
    if 条件表达式 {
      执行代码块1
    } else {
      执行代码块2
    }
    
    案例:
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var age int = 17
        if age > 18 {
            fmt.Println("大于18")
        } else {
            fmt.Println("小于18")
        }
    }
    
    
    多分支控制
    if 条件表达式 {
      执行代码块1
    } else if {
      执行代码块2
    } else {
      执行代码块3
    }
    
    案例:
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var score int = 99
        if score == 100 {
            fmt.Println("=100")
        } else if score > 80 && score <= 99 {
            fmt.Println(">80&&<=90")
        } else if score >=60 && score <= 80 {
            fmt.Println(">=60 && <=80")
        } else {
            fmt.Println("<=60")
        }
    }
    
    案例:下面的案例是错误的写法,因为只会输出 ">9" 
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var n int = 10
        if n >  9 {
            fmt.Println(">9")
        } else if n > 6 && n <= 9 {
            fmt.Println(">6&&<=9")
        } else if n >=3 && n <= 6 {
            fmt.Println(">=3 && <=6")
        } else {
            fmt.Println("<=3")
        }
    }
    
    
    嵌套分支基本语法
    
    if 条件表达式 {
        if 条件表达式 {
        执行代码块1
        } else {
        执行代码块2
        }
    
    }
    
    案例:出票系统:根据淡旺季的月份和年龄,打印票价
    4-10月 旺季:
      成人(18-60):60
      儿童(<18):半价
      老人(>60):1/3
    淡季:
      成人:40
      其他:20
    
    package main
    
    import (
        "fmt"
    )
     
    func main() {
      var month byte
      var age byte
      var price float64 = 60.0
      
      fmt.Println("请输入月份")
      fmt.Scanln(&month)
      fmt.Println("请输入年龄")
      fmt.Scanln(&age)
     
      if month >=4 && month <=10 {
        if age > 60 {
          fmt.Printf("%v月 票价 %v 年龄 %v ",month,price / 3 ,age)
        } else if age >=18 {
          fmt.Printf("%v月 票价 %v 年龄 %v ",month,price,age)
        } else {
          fmt.Printf("%v月 票价 %v 年龄 %v ",month,price / 2,age)
        }
      } else {
        if age >=18 && age < 60 {
          fmt.Println("淡季成人票价40")
        } else {
          fmt.Println("淡季儿童和老人票价20")
        }
      }
    }
    
    
    
    switch语句基本语法
    switch 表达式{
        case 表达式1,表达式2,...:
            语句块1
            
        case 表达式3,表达式4,...:
            语句块2
            
        // 这里可以有多个case语句
    
        defaut:
            语句块    
        
    }
    
    
    switch快速入门案例:
    请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g  
    a表示星期一,b表示星期二,...根据用户的输入显示相应的信息
    
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var key byte
        fmt.Println("请输入一个字符 a,b,c,d,e,f,g")
        fmt.Scanf("%c",&key)
        
        switch key {
            case 'a':
                fmt.Println("周一")
            case 'b':
                fmt.Println("周二")
            case 'c':
                fmt.Println("周三")
            case 'd':
                fmt.Println("周四")
            case 'e':
                fmt.Println("周五")
            case 'f':
                fmt.Println("周六")
            case 'g':
                fmt.Println("周日")
            default:
                fmt.Println("输入有误...")            
        }
    }
     
     
    案例:根据用户指定月份,打印该月份所属的季节:
    3,4,5春季   6,7,8 夏季   9,10,11 秋季  12,1,2 冬季
    
    package main
    
    import (
        "fmt"
    )
      
    func main() {
        var month byte
        fmt.Println("请输入月份")
        fmt.Scanln(&month)
        
        switch month {
            case 3, 4, 5 :
                fmt.Println("春季")
            case 6, 7, 8 :
                fmt.Println("夏季")
            case 9, 10, 11 :
                fmt.Println("秋季")
            case 12, 1, 2 :
                fmt.Println("冬季")
            default:
                fmt.Println("输入有误...")            
        }
    }
    
    
     
    switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,直到匹配为止。
    如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用switch语句。
    如果区间判断和结果为bool类型的判断,使用if语句。
    
    
    swith使用细节:
    (1)case后面是一个表达式(即:常量值、变量、一个有返回值的函数都可以)
    
    
    (2)case后的各表达式的值的数据类型必须和swith表达式数据类型一致;
    var n1 int32 =20
    var n2 int64 =20 
    switch n1 {
        case n2 :  // 错误:原因是n1和n2数据类型不一致
            fmt.Println("xxx")
    
    (3)case后面可以带多个表达式,使用逗号间隔,比如case 表达式1,表达式2
    var n1 int32 =20
    var n2 int32 =20 
    switch n1 {
        case n2,10,5 :  // case 后面可以有多个表达式
            fmt.Println("xxx")
    
    (4)case后面的表达式如果是常量值,即要求不能重复;
    var n1 int32 =20
    var n2 int32 =20 
    switch n1 {
        case n2,10,5 :   
            fmt.Println("xxx")
        case 5 :  // 错误,因为前面已经有常量5,因此重复报错
            fmt.Println("xxx")
             
    (5)case后面不需要带break;
    
    (6)defaut语句不是必须的;
    
    (7)swith后面可以不带表达式,类似if else分支来使用;
    
    (8)swith后面也可以直接申明定义一个变量,分号结束,不推荐;
    
    (9)switch之fallthrough(穿透)也就是执行某个case后,还会再执行它接下来的一个case
    
    (10)Type switch :swich语句还可以被用于type-switch来判断某个Interface变量中实际指向的变量类型;
    
    
    
    循环控制 
    
    (1)循环控制第二种使用方式
    for 循环变量初始化;循环条件;循环变量迭代 { 
        循环执行语句
    }
    
    案例:
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        for i:=1;i<=10;i++{
            fmt.Println("hello ",i)
        }
    }
    
    
    (2)循环控制第二种使用方式
    for 循环条件 {
        循环操作
    } 
    
    案例:    
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        j := 1 
        for j<=10 {
            fmt.Println("hello ",j)
            j++
        }
    }
        
    (3)循环控制三种使用方式
    for {
        循环操作
        break
       }
    
    上面的写法等价于   for ;; {}  是一个无限循环,通常需要配合 break 语句使用
    
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        k := 1 
        for {
            if k<=10 {
            fmt.Println("hello ",k)
            } else {
                break
            }
            k++
        }
    }
    
        
    golang提供for-range方式,可以方便的遍历字符串和数组;(是按照字符来遍历的,而不是字节)
    
    字符串遍历方式1 ==> 传统方式
    
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        var str string = "abcde,fghijkkk"
        for i := 0; i< len(str); i++ {
            fmt.Printf("%c 
    ",str[i]) 
        }
    }
    
    
    
    字符串遍历方式2 ==> for-range方式
    
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        var str string = "abcde,fghijkkk"
        for i := 0; i< len(str); i++ {
            fmt.Printf("%c 
    ",str[i]) 
        }
    }
    
    
    如果字符串含有中文,那么传统遍历字符串方式就会出现乱码,原因是传统的对字符串的遍历是按照字节来遍历。
    如何解决?需要将 str 转换成 []rune 切片 
    
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        var str string = "ab好人de,fghi理查德kkkk"
        str2 := []rune(str)
        for i := 0; i< len(str2); i++ {
            fmt.Printf("%c 
    ",str2[i]) 
        }
    }
    
    如果字符串含有中文,那么 for-range方式也是可以的。
    
    
    
    跳转控制语句-break
    break语句用于终止某个语句块的执行,用于中断当前for循环或跳出switch语句。
    案例:编写一个无限循环控制,然后不停的随机生成树,当生成了99时,就退出这个无限循环
    package main
    
    import (
        "fmt"
        "math/rand"
        "time"
    )
       
    func main() {
        var count int = 0 
        for {
            rand.Seed(time.Now().UnixNano())
            n := rand.Intn(100)+1
            fmt.Println("n=",n)
            count++
            if (n == 99) {
            break
            }
        } 
    }
     
    
    跳转控制语句-continue
    continue语句用于结束本次循环,继续执行下一次循环
    
    案例:
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        for i:= 0;i < 4 ;i++ {
            for j:= 0;j<10;j++{
                if j==2{
                continue
                }
                fmt.Println("j= ", j)
            } 
        } 
    }
    
    案例:打印 1-100之间的奇数
    package main
    
    import (
        "fmt"
    )
       
    func main() {
        for i:= 0;i < 100 ;i++ {
            if i % 2 == 0 {
                continue
            }
            fmt.Println("奇数是: ",i)
        } 
    }
    
    
    
    跳转控制语句goto
    
    goto语句可以无条件地转移到程序中指定的行;
    goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能;
    在go程序设计中一般不主张使用goto语句,以避免造成程序流程的混乱;
    
    案例: 
    
    import (
        "fmt"
    )
       
    func main() {
        var n int = 30 
        fmt.Println("ok1")
        if n > 20{
            goto label1
            }
        fmt.Println("ok2")
        label1:
        fmt.Println("ok3")
    }
    
    
    跳转控制语句return
    表示跳出所在的方法或函数;
    如果return是在普通的函数,则表示跳出该函数。
    如果return是在main函数,表示终止main函数,也就是终止程序。
  • 相关阅读:
    sp_executesql介绍和使用
    jQuery中的 return false, e.preventDefault(), e.stopPropagation()的区别
    clearfix:after 清除css浮动
    paip.mysql 性能跟iops的以及硬盘缓存的关系
    paip.mysql 性能测试 报告 home right
    paip.mysql 性能测试by mysqlslap
    paip.java 架构师之路以及java高级技术
    paip. 提升性能---hibernate的缓存使用 总结
    paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误
    paip.解决access出现 -2147467259 无效的参数量
  • 原文地址:https://www.cnblogs.com/liang545621/p/13370144.html
Copyright © 2020-2023  润新知