go的条件判断
if 语句
条件判断就是对于一个或者多个条件,并判断条件是否为true,执行指定语句,并在为false的情况下执行另外一个语句,下面看一下条件语句的结构:
简单说一下就是,定义的事件,根据判断,是否符合某一个条件,符合执行符合的语句,不符合执行不符合的语句。
举个例子看看:
package main
import "fmt"
//if判断
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    var A int = 80
    if ( A > 90 ) {    //这里判断了条件A大于90,定义的A的值小于90,所以不执行下面的语句。
        fmt.Println("成绩大于90分,为优秀")
    }
    fmt.Println("成绩小于90分,位良好")
}
打印结果:
成绩小于90分,位良好
if...else语句
这是一个简单的if语句,一个布尔表达式后紧跟一个或多个语句组成。也可以在if语句后跟else语句,执行布尔表达式为false的条件。下面看个例子,
package main
import "fmt"
//if...else语句
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    var score = 90
    if (score >= 90){     //大于等于90的条件
        fmt.Println(score,"优秀")
    } else if (score >= 80) {   //大于等于80的条件
        fmt.Println(score,"良好")
    } else if (score >= 60) {     //大于等于60的条件
        fmt.Println(score,"合格")
    } else if (score < 60){      //小于60的条件
        fmt.Println(score,"不合格")
    }
}
打印结果:
90 优秀
if嵌套语句
if嵌套就是在if或者else if语句中嵌入一个或多个if或else if语句,下面看看嵌套语法:
if 布尔表达式 1 {
   /* 在布尔表达式 1 为 true 时执行 */
   if 布尔表达式 2 {
      /* 在布尔表达式 2 为 true 时执行 */
   }
}
使用例子说明一下:
package main
import "fmt"
//if...else 嵌套语句
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    var A int = 92
    var B int = 60
    if ( A > 90 ) {  //判断A的值大于90
        fmt.Println("A的值大于90")
        if ( B == 60 ) {  //判断B的值等于60
            fmt.Println("如果A大于90,且B等于60")
        } else {  //判断A的值大于90,且不等于60
            fmt.Println("B的值不等于60")
        }
    } else {    //判断A的值小于90
        fmt.Println("A的值小于90")
    }
}
打印结果:
A的值大于90 如果A大于90,且B等于60
switch 语句
switch语句就是基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止。匹配后不需要执行break,默认情况下case自带break语句,匹配成功后不执行后面的case,可以使用fallthrough。
switch 语法:
switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}
变量var1可以是任何类型,而val1和val2则可以是相同类型的任意值。类型没有局限性,可以是常量也可以是整数,但必须是相同的类型;或者最终结果为相同类型的表达式。可以使用多个可能符号条件的值,使用逗号分割它们,例如:case val1,val2, val3.
流程图:
下面看一下例子:
package main
image "fmt"
// switch 语句
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    var grade string        //定义grade类型
    var marks int = 90       //定义成绩
    switch marks {  //定义等级条件
    case 90: grade = "A"
    case 80: grade = "B"
    case 50,60,70: grade = "C"
    default:
        grade = "D"
    }
    switch {           //判断等级
    case grade == "A" :
        fmt.Println("优秀")
    case grade == "B",grade == "C" :
        fmt.Println("良好")
    case grade == "D" :
        fmt.Println("及格")
    case grade == "F" :
        fmt.Println("不及格")
    default:
        fmt.Println("差")
    }
    fmt.Printf("你的等级是%s \n",grade)
}
执行结果:
优秀 你的等级是A
Type Switch
switch语句还可以用于type-switch来判断某个interface变量中实际存储的变量类型。
Type Switch语法如下:
witch x.(type){
    case type:
       statement(s);      
    case type:
       statement(s); 
    /* 你可以定义任意个数的case */
    default: /* 可选 */
       statement(s);
}
看看例子:
package main
import "fmt"
//Type Switch
// 吴老二 个人博客地址 http://www.wulaoer.org
type Bag struct {
    key string
}
type Bag1 struct {
    key int
}
func main()  {
     var b1 interface{}
     var b2 interface{}
     b1 = Bag{key: "1"}
     b2 = Bag1{key: 0}
     //获取interface{}中存放的数据类型
     //方法一:
     { //判断是否是Bag类型,若不是则置0
         b,ok := b1.(Bag)
         fmt.Println("Bag类型 : ",ok,"数据",b)
     }
     {//判断是否是Bag2类型,若不是则置0
         b,ok := b2.(Bag1)
         fmt.Println("Bag2类型 :",ok,"数据",b)
     }
     //方法二:
    switch v := b1.(type) {  //v表示b1接口转换成Bag对象的值
    case Bag:
        fmt.Println("b1.(type):", "Bag",v)
    case Bag1:
        fmt.Println("b1.(type):", "Bag1",v)
    default:
        fmt.Println("b1.(type):", "other",v)
    }
}
执行结果:
Bag类型 :  true 数据 {1}
Bag2类型 : true 数据 {0}
b1.(type): Bag {1}
fallthrough
使用fallthrough会强制执行后面的case语句,fallthrough不会判断下一条case的表达式结果是否为true。
package main
import "fmt"
//fallthrough
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    switch {
    case false:
        fmt.Println("1、case")
        fallthrough
    case true:
        fmt.Println("2、case")
        fallthrough
    case false:
        fmt.Println("3、case")
        fallthrough
    case true:
        fmt.Println("4、case")
    case false:
        fmt.Println("5、case")
        fallthrough
    default:
        fmt.Println("6、case")
    }
}
执行结果:
2、case 3、case 4、case
select 语句
select和switch语句类似,但是select会随机执行一个可运行的case,如果没有可运行的case,它会出现阻塞,直到case可运行。
语法:
select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s); 
    /* 你可以定义任意数量的 case */
    default : /* 可选 */
       statement(s);
}
select语句的语法:
每个case都必须是一个通信 所有channel表达式都会被求值 所有被发送的表达式都会被求值 如果任意某个通信可以进行,它就执行,其他被忽略。 如果有多个case都可以运行,select会随机公平地选出一个执行,其他不会执行。否则: 1、如果有default子句,则执行该语句 2、如果没有default子句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。
select语句例子:
第一个例子:
package main
import "fmt"
//select
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    var c1,c2,c3 chan  int
    var i1,i2 int
    select {
    case i1 = <-c1:
        fmt.Println("received",i1,"from c1")
    case c2 <- i2:
        fmt.Println("sent",i2,"to c2")
    case i3,ok := (<-c3):
        if ok {
            fmt.Println("received",i3,"from c3")
        } else {
            fmt.Println("c3 is closed")
        }
    default:
        fmt.Println("no communication")
    }
}
打印结果:
no communication
第二个例子
package main
import (
"fmt"
"time"
)
// 吴老二 个人博客地址 http://www.wulaoer.org
func Chann(ch chan int, stopCh chan bool) {
    var i int
    i = 10
    for j := 0; j < 10; j++ {
        ch <- i
        time.Sleep(time.Second)
    }
    stopCh <- true
}
func main() {
    ch := make(chan int)
    c := 0
    stopCh := make(chan bool)
    go Chann(ch, stopCh)
    for {
        select {
        case c = <-ch:
            fmt.Println("Recvice", c)
            fmt.Println("channel")
        case s := <-ch:
            fmt.Println("Receive", s)
        case _ = <-stopCh:
            goto end
        }
    }
end:
}
打印结果:
Receive 10 Recvice 10 channel Receive 10 Receive 10 Receive 10 Receive 10 Recvice 10 channel Recvice 10 channel Receive 10 Recvice 10 channel
扩展内容,写一个登录的脚本,判断输入的用户名和密码是否正确。
package main
import "fmt"
//用户登录
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    var name string
    var pass string
    fmt.Printf("请输入用户名:")
    fmt.Scan(&name)
    fmt.Printf("请输入密码:")
    fmt.Scan(&pass)
    if name == "wolf27w" && pass == "wolf27w" {
        fmt.Println("登录成功")
    } else {
        fmt.Println("账号或密码错误,登录失败")
    }
}
2、go的for循环语句
在程序中有很多重复性的操作,因此,为了减少这种操作需要用到for循环,执行某些语句。
流程如下:
for循环
下面先简单的说一下for循环的语法:
和C语言的for一样:
for init; condition; post { }
和C的while一样:
for condition { }
和C的for(;;)一样:
for { }
init: 一般赋值表达式,给控制变量赋初值;
condition: 关系表达式或逻辑表达式,循环控制条件;
post: 一般为赋值表达式,给控制变量增量或减量。
for语句执行过程如下:
1、先对表达式1赋初值; 2、判断肤质表达式init是否满足给定的条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行post,进入第二次循环,再判断condition;否则判断condition的值为假,不满足条件,就终止fot循环,执行循环外的语句。
for循环的range格式可以对slice、map、数组、字符串等进行迭代循环,格式如下:
for key, value := range oldMap {
    newMap[key] = value
}
流程语法如下图:
先写一个简单的循环
package main
import "fmt"
//for循环
// 吴老二 个人博客地址 http://www.wulaoer.org
func main() {
    var b int = 15
    var a int
    numbers := [6]int{1, 2, 3, 5}  //数组的切片
    /* for 循环 */
    for a := 0; a < 10; a++ {   //a++自增
        fmt.Printf("a 的值为: %d\n", a)
    }
    for a < b {
        a++
        fmt.Printf("a 的值为: %d\n", a)
    }
    for i,x:= range numbers {
        fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
    }
}
打印结果:
a 的值为: 0 a 的值为: 1 a 的值为: 2 a 的值为: 3 a 的值为: 4 a 的值为: 5 a 的值为: 6 a 的值为: 7 a 的值为: 8 a 的值为: 9 a 的值为: 1 a 的值为: 2 a 的值为: 3 a 的值为: 4 a 的值为: 5 a 的值为: 6 a 的值为: 7 a 的值为: 8 a 的值为: 9 a 的值为: 10 a 的值为: 11 a 的值为: 12 a 的值为: 13 a 的值为: 14 a 的值为: 15 第 0 位 x 的值 = 1 第 1 位 x 的值 = 2 第 2 位 x 的值 = 3 第 3 位 x 的值 = 5 第 4 位 x 的值 = 0 第 5 位 x 的值 = 0
嵌套for循环
嵌套for循环就是在for循环中增加一个或多个for循环,嵌套使用。
语法:
for [condition |  ( init; condition; increment ) | Range]
{
   for [condition |  ( init; condition; increment ) | Range]
   {
      statement(s);
   }
   statement(s);
}
举个例子:
找出2到100之间的所有素数:
package main
import "fmt"
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    var i,j int
    for i = 2; i < 100; i++ {
        for j = 2; j < 100; j++{ //也可以把j<100替换成j<(i/j)
            if (i%j== 0) {
                break
            }
        }
        if (j > (i/j)) {
            fmt.Printf("%d 是素数\n",i)
        }
    }
}
打印结果:
2 是素数 3 是素数 7 是素数 13 是素数 23 是素数 31 是素数 43 是素数 47 是素数 59 是素数 61 是素数 73 是素数 79 是素数 97 是素数
循环控制语句
在for循环的过程中,如果嵌套了if判断,那么if判断找到要找的值,就需要推出for循环了。在go中有三种控制语句,第一个就是推出不在循环(break),第二种就是跳出本次循环,下一轮循环继续(contioue),第三种就是就需要控制的语句转移到被标记的语句。
先看一下第一个循环break
语法:
continue;
先看一下流程图:
写个例子,找出10以内大于5的数:
package main
image "fmt"
// 吴老二 个人博客地址 http://www.wulaoer.org
func main() {
    /* 定义局部变量 */
    var a int = 1
    /* for 循环 */
    for a < 10 {
        fmt.Printf("a 的值为 : %d\n", a);
        a++;
        if a > 5 {
            /* 使用 break 语句跳出循环 */
            break;
        }
    }
}
打印结果:
a 的值为 : 1 a 的值为 : 2 a 的值为 : 3 a 的值为 : 4 a 的值为 : 5
continue和break一样也是跳出循环,不过continue跳出的是本次循环,
流程图如下:
看下例子:
package main
image "fmt"
// 吴老二 个人博客地址 http://www.wulaoer.org
func main()  {
    for i := 1;i <10;i++ {
        if i == 5 {
            continue
        }
        fmt.Printf("循环的值%d\n",i)
    }
}
打印结果:
循环的值1 循环的值2 循环的值3 循环的值4 循环的值6 循环的值7 循环的值8 循环的值9
goto可以无条件地转移到过程中指定的行。通常和条件配合使用,可以用来实现条件转移,构成循环,跳出循环体等功能。但是在结构话程序中不建议使用,以免造成流程的混乱,使理解和调试程序都产生困难。
语法:
goto label; .. . label: statement;
流程图如下:
在变量 a 等于 15 的时候跳过本次循环并回到循环的开始语句 LOOP 处:
package main
import "fmt"
// 吴老二 个人博客地址 http://www.wulaoer.org
func main() {
   /* 定义局部变量 */
   var a int = 10
   /* 循环 */
   LOOP: for a < 20 {
      if a == 15 {
         /* 跳过迭代 */
         a = a + 1
         goto LOOP
      }
      fmt.Printf("a的值为 : %d\n", a)
      a++     
   }  
}
打印结果:
a的值为 : 10 a的值为 : 11 a的值为 : 12 a的值为 : 13 a的值为 : 14 a的值为 : 16 a的值为 : 17 a的值为 : 18 a的值为 : 19
下面看一个99乘法表
func main() {
    print9x()
    //gotoTag()
}
// 吴老二 个人博客地址 http://www.wulaoer.org
//嵌套for循环打印九九乘法表
func print9x() {
    for m := 1; m < 10; m++ {
        for n := 1; n <= m; n++ {
            fmt.Printf("%dx%d=%d ",n,m,m*n)
        }
        fmt.Println("")
    }
}
//for循环配合goto打印九九乘法表
func gotoTag() {
    for m := 1; m < 10; m++ {
        n := 1
    LOOP: if n <= m {
        fmt.Printf("%dx%d=%d ",n,m,m*n)
        n++
        goto LOOP
    } else {
        fmt.Println("")
    }
        n++
    }
}
打印结果:
1x1=1 2x1=2 2x2=4 3x1=3 3x2=6 3x3=9 4x1=4 4x2=8 4x3=12 4x4=16 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
以上就是真对Golang的if判断和for循环用法的基本操作,或者操作相关的知识点。虽然这个写的很多,但是知识点也就这几个,已经使用其他颜色标注了,可以自己看看标注的内容。今天的进步是对后天的牛逼攒下一点资本。努力吧,少年。








您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏