Go语言学习笔记(语法篇) - 控制结构

Go语言的控制结构比Java、C语言都要少,只有很简单的几个,语法与也略有不一样。

数组

Go语言的保留关键字

break     default     func     interface     select
case     defer     go     map     struct
chan     else     goto     package     switch
const     fallthrough     if     range     type
continue     for     import     return     var

学习

运算符

* / % << >> & &^ + - | ^ && || ! 优化

if

if中的条件不须要用中括号()给包含起来。 spa

a := 1
b := 2
c := 3
if a < b && b < c {
    fmt.Println(true)
} else {
    fmt.Println(false)
}

并且if接受初始化语句,初始化的变量为一个局部变量。 code

if f, err := os.Open("c:/hello.go"); err == nil {
    fmt.Println(f.Name())
} else {
    fmt.Println(err)
}

goto

在Java里这是一个保留关键字,但没有任何实际做用。goto用很差容易形成程序的逻辑混乱。下面用Lable标识一个标签,goto能够将执行跳转到这个标签位置,注意标签是大小写敏感的。

func myfunc() {
    i := 0
Lable:
    fmt.Println(i)
    i++
    if i < 10 {
        goto Lable
    }
}

for

Go中没有while,do while循环,只有一个for,不过却能够完成各类灵活循环操做,一样也不须要中括号包含。
依旧有break,continue关键字,用法和其它语言同样。 索引

func main() {
    //跟Java类似的for循环
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    //与While同样
    for false {
	
    }
    /死循环
    for {
	
    }  
Here:
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
	    fmt.Println(j)
	    if j > 5 {
	        break Here
	    }
        }
    }
}

range

range能够用于对集合的循环,集合后面在继续学习,先看一下用range来遍历数组。 编译器

var ss []string = []string{"aaa", "bbb", "ccc", "ddd"}
    for i, v := range ss {
        fmt.Printf("索引是%d, 值是:%s\n", i, v)
    }


switch

Go的switch很灵活,不必定非要用常量,还支持表达式,下面一组代码片段是判断常量的。 string

func main() {
    i := 0
    switch i {
    case 0:
        //若是不加这个关键字,若是i等于0不会进到下面的case 1中
        fallthrough
    case 1:
        fmt.Println(111)
    }
}
func main() {
    ch := 'b'
    switch ch {
    //多个值用逗号分隔
    case 'a', 'b', 'c':
        fmt.Println(111)
    default:
        fmt.Println(222)
    }
}
下面这段代码是 case表达式的
func main() {
    i := 10
    switch {
    case i < 10:
        fmt.Println(111)
    case i < 20:
        fmt.Println(222)
    default:
        fmt.Println(333)
    }
}
很是灵活、强大的switch,可是也给我带来一个疑问,Go的编译器怎么对switch进行编译优化呢,假如说一个switch其中有几百甚至上千个case,起不是要按照顺序一个一个去匹配,时间复杂度就变成O(N)了,常量的switch好处就是能够让时间复杂度变成O(1)
相关文章
相关标签/搜索