go语言一个比较方便的特性是你不需要显示的定义一个变量.例如,在c语言中,你想要使用一个int型变量,那么代码如下

int i; i =0; i++;

而在go语言中,

i := 0; i++

这样你可以在"="前加上一个":",表示这个等号前面的是一个新的变量.那么这种隐式的变量声明有可能会导致严重的难以查找的bug.

样例代码如下:

func foo(bb int) {
  var aa int
  aa = 1
  if bb > 0 {
    aa, err := foo2(bb)
    if err != nil {
      //handle error
    }
  }
  foo3(aa)

}

在这个代码片段中,foo2是一个拥有两个返回值的函数,第一个是一个int,第二个是error.我们习惯性的写下下面这句代码

aa, err := foo2(bb)

这会导致if语句块内的aa覆盖了外面的aa,导致foo3函数得不到真正的aa的值.

这种错误很不起眼,但是一旦写出来,非常难以排查,因此在语句块内对于"="和":="的使用要格外小心.

最新文章

  1. 一键批量添加材质的法线贴图-unity插件
  2. openmp 的使用
  3. 《C#高级编程》之委托学习笔记 (转载)
  4. WPF 异步加载高清大图
  5. [转]NullPointerException异常
  6. 【BZOJ 1758】【WC 2010】重建计划 分数规划+点分治+单调队列
  7. ckfinder的配置使用
  8. android service 学习
  9. 04-树5 Root of AVL Tree
  10. Java Concurrency - 浅析 Phaser 的用法
  11. 超大文件上传到Azure Linux虚拟机最佳实践
  12. JAVA 创建TXT文件,写入文件内容,读取文件内容
  13. 移动web开发资源大整合
  14. linux_定时任务
  15. 芝麻HTTP:Appium的安装
  16. 听《津津乐道》ThinkPad专题节目有感
  17. MySQL四种隔离级别和MVCC
  18. Spring boot Mybatis 整合
  19. JSONObject 的使用学习
  20. 回归JavaScript基础(六)

热门文章

  1. 前端模块加载规范AMD与CMD小记
  2. Vitamio 视频播放
  3. Bzoj2165 大楼
  4. [LeetCode] Evaluate Reverse Polish Notation stack 栈
  5. 【Tomcat】Tomcat下设置项目为默认项目
  6. centos dhcp获取不到ip解决方法 Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization.
  7. JS日历控件集合----附效果图、源代码
  8. libyuv编译(各平台)【转】
  9. hdu 5108(数论-整数分解)
  10. 处理下最近的file_id小写问题