今天饭饭给我出了个题目,下面这段代码为什么报错,怎么改?
|
|
运行一下,发现报错如下:
|
|
18行,也就是
|
|
报错了,报错没法提供更多信息(go新手,老鸟可能能看出端倪),我们加一些打印
|
|
结果如下:
|
|
我们发现,2处的a
竟然不是我们定义的(1处)a
,发生了什么!
其实看到这里很多人可能都明白了,其实是a, err := generate()
里面:=
的问题,我们最初的设想是golang会定义新变量err
,而a
为初始定义的那个变量(1处)。但实际情况是,对于使用:=
定义的变量,如果新变量与那个同名已定义变量 (这里就是1处的变量a
)不在一个作用域中时,那么golang会重新定义这个变量,这就是导致这个问题的真凶。
怎么改呢,我们重写一下main
函数:
|
|
如此即可~
这个坑真的非常容易踩,而且不太好发现,感谢饭饭🙏