GO语言基础语法2| 青训营笔记

99 阅读3分钟

条件语句if

Go 编程语言中 if 语句的语法如下:

• 可省略条件表达式括号。
• 持初始化语句,可定义代码块局部变量。 
• 代码块左 括号必须在条件表达式尾部。

if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
}

条件语句switch

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

switch x.(type){
case type:
statement(s)\
case type:
statement(s)
/\* 你可以定义任意个数的case */
default: /* 可选 \*/
statement(s)
}
    func main() {
    var x interface{}
    //写法一:
    switch i := x.(type) { // 带初始化语句
    case nil:
        fmt.Printf(" x 的类型 :%T\r\n", i)
    case int:
        fmt.Printf("x 是 int 型")
    case float64:
        fmt.Printf("x 是 float64 型")
    case func(int) float64:
        fmt.Printf("x 是 func(int) 型")
    case bool, string:
        fmt.Printf("x 是 bool 或 string 型")
    default:
        fmt.Printf("未知型")
    }
    //写法二
    var j = 0
    switch j {
    case 0:
    case 1:
        fmt.Println("1")
    case 2:
        fmt.Println("2")
    default:
        fmt.Println("def")
    }
    //写法三
    var k = 0
    switch k {
    case 0:
        println("fallthrough")
        fallthrough
        /*
            Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;
            而如果switch没有表达式,它会匹配true。
            Go里面switch默认相当于每个case最后带有break,
            匹配成功后不会自动向下执行其他case,而是跳出整个switch,
            但是可以使用fallthrough强制执行后面的case代码。
        */
    case 1:
        fmt.Println("1")
    case 2:
        fmt.Println("2")
    default:
        fmt.Println("def")
    }
}

条件语句select

select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

select 是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。 select 随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。

 select {
     case communication clause  :
        statement(s);      
     case communication clause  :
        statement(s);
     /* 你可以定义任意数量的 case */
     default : /* 可选 */
        statement(s);
 }

循环语句 for

     for init; condition; post { }
     for condition { }
     for { }
     init: 一般为赋值表达式,给控制变量赋初值;
     condition: 关系表达式或逻辑表达式,循环控制条件;
     post: 一般为赋值表达式,给控制变量增量或减量。
     for语句执行过程如下:
     ①先对表达式 init 赋初值;
     ②判别赋值表达式 init 是否满足给定 condition 条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。

循环语句range

Golang range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

for key, value := range oldMap {
    newMap[key] = value
}
  • 注意,range 会复制对象。

另外两种引用类型 map、channel 是指针包装,而不像 slice 是 struct。

for 和 for range有什么区别?

主要是使用场景不同

for range可以完成所有for可以做的事情,却能做到for不能做的,包括

遍历key为string类型的map并同时获取key和value

遍历channel