易错点

// switch 默认值
func p() bool {
return false } func main() { switch p() // 这种情况下会打印true;原因:这种情况下相当于 switch p();true { true 是默认的 { case true: fmt.Println("true") case false: fmt.Println("false") } }

 

func p() {
    defer func() {
        fmt.Println("hello")
    }()
    os.Exit(1)       // 不会执行defer
    runtime.Goexit() // 会执行的defer,必须在一个goroutine
}
func main() {
    go p()
    time.Sleep(time.Second)
}

 

// 位运算  注意常量与变量的不同
var a uint = 10 const b uint = 10 func main() { var x byte = (1 << a) % 100 // a 是变量,因此会将1024先赋给x,但是此时超出范围了,因此x为0; 0%100在赋值给x,因此是0 var y byte = (1 << b) % 100 // a 是常量,因此会将1024%100再赋值给y,因此是24 fmt.Println(x, y) // 0,24 }

 

// 多级表达式中,没有前后顺序  
var m []int = nil m, m[0] = []int{1, 2}, 8 // index out of range [0] with length 0 fmt.Println(m)

 

1

posted @ 2020-01-17 17:41  慕沁  阅读(117)  评论(0)    收藏  举报