1. 变量作用域
var p *int func foo() (*int, error) { var i int = 5 return &i, nil } func bar() { //use p fmt.Println(*p) } func main() { p, err := foo() if err != nil { fmt.Println(err) return } bar() fmt.Println(*p) }
runtime error
问题出在操作符:=,对于使用:=定义的变量,如果新变量与同名已定义的变量不在同一个作用域中,那么 Go 会新定义这个变量。对于本例来说,main() 函数里的 p 是新定义的变量,会遮住全局变量 p,导致执行到bar()时程序,全局变量 p 依然还是 nil,程序随即 Crash。
2. 循环次数在循环开始前就已经确定
func main() { v := []int{1, 2, 3} for i := range v { v = append(v, i) } }
循环次数在循环开始前就已经确定,循环内改变切片的长度,不影响循环次数。
[1 2 3 0]
[1 2 3 0 1]
[1 2 3 0 1 2]
3.
参考:
原文:https://www.cnblogs.com/embedded-linux/p/13426657.html