首页 > 其他 > 详细

golang易错题收集

时间:2020-08-03 16:30:30      阅读:95      评论:0      收藏:0      [点我收藏+]

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. 

 

参考:

1. http://mian.topgoer.com/

golang易错题收集

原文:https://www.cnblogs.com/embedded-linux/p/13426657.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!