易错点
// 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