常见的 if 语句大约是这个样子的(C++):

Event event = getEvent();
if (event == EventA) {processA(event);
} else {processB(event);
}

这样有一个问题:变量 event 定义在了 if 语句的外面,也就是说,在 if 语句之后,也可以继续使用 event 变量;而如果后续的操作中不需要 event 变量了,它实际上就造成了命名空间的污染。这并不是一个严重的问题,多数情况下不会造成任何问题,而如果一定要解决的话,在 C++ 中可以在 event 的定义之外套一层大括号来限定它的作用域。虽然代码看上去有一些奇怪,但无伤大雅。比如这样:

{Event event = getEvent();if (event == EventA) {processA(event);} else {processB(event);}
}

但是 Go 的设计者不知是出于什么原因,非要从语法上解决这个问题。于是 Go 中的 if 语句可以写成这个样子:

if event := getEvent(); event == EventA {processA(event)
} else {processB(event)
}

对,你没有看错。虽然 event 是定义在了 if 中,但它在 else 中也是可以用的。也就是说,这种写法实际上是上述的 C++ 写法的语法糖。

并不清楚 Go 的设计者添加这个语法糖的目的是什么。它仅仅是为了解决变量的作用域问题而提出,却牺牲了代码的可读性。if 语句可能会变得过长而不易阅读;在后续重构的过程中,拆分 if 语句也会变得困难。为了解决一个小问题而增加一种有问题的语法,看上去有点得不尝失。

原文链接:https://zhuanlan.zhihu.com/p/59633089

Go语言中奇怪的if语句相关推荐

  1. 奇怪的方式c语言,C语言中奇怪的C语言特性

    3)Duff's Device http://en.wikipedia.org/wiki/Duff%27s_device 特点是switch与while交错出现.代码类似 4)同名同姓现象 在< ...

  2. c语言格式字符If,C语言所有语句格式 C语言中的的if语句共有多少种格式?

    导航:网站首页 > C语言所有语句格式 C语言中的的if语句共有多少种格式? C语言所有语句格式 C语言中的的if语句共有多少种格式? 相关问题: 匿名网友: 1.if语句: if(Bool表达 ...

  3. C语言中要改变循环语句的流程可以使用的语句有哪些

    C语言中要改变循环语句的流程可以使用的语句有:break,continue和goto.break语句可以终止循环而执行整个循环语句后面的代码:continue语句可以跳过循环体中剩余的语句而强制进入下 ...

  4. c语言按键实现跳转程序,C语言中的跳转语句

    <C语言中的跳转语句>由会员分享,可在线阅读,更多相关<C语言中的跳转语句(4页珍藏版)>请在人人文库网上搜索. 1.C语言中的跳转语句c语言有4个跳转语句return.got ...

  5. c语言中偶数的平方while,在C语言中可以用以下语句来实现循环:1. 用while语句;2. ...新版1127.ppt...

    在C语言中可以用以下语句来实现循环:1. 用while语句:2. ...新版1127.ppt 循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体. 循环语句之 while语句 ...

  6. c语言自定义color,forecolor c语言中的颜色设置语句详解

    backcolor与forecolor的区别 backcolor:用来设置图像的背景颜色,也用来设置文档.表格.图像等的背景颜色. forecolor:用来设置图像的前景颜色,也用来设置文档.表格.图 ...

  7. c语言输入循环语句,C语言中输入输出和循环语句详解.ppt

    C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...

  8. pass在c语言中的作用,Python语句中pass语句有什么作用?浅谈pass语句的用法

    pass语句就是好比是数学中的0,本身并没有任何实际意义,但是又是个确实存在的字符.所以,Pythonpass语句是空语句,是为了保持程序结构的完整性,pass不做任何事情,一般用做占位语句,作用与b ...

  9. c语言表达式和表达式语句的区别,C语言中表达式和表达式语句的区别(什么又叫做表达式)?...

    满意答案 sfuejr22 2016.01.13 采纳率:56%    等级:7 已帮助:659人 表达式: 表达式是操作符.操作数和标点符号组成的序列,其目的是用来说明-个计算过程. 表达式可以嵌套 ...

最新文章

  1. Backbone学习日记[1]:感性认识
  2. 手把手带你剖析 Springboot 启动原理!
  3. Firefox 多版本共存
  4. Excel ,三步 快速实现应用一个公式到一列或一行中
  5. mysql 表名不加单引号_当表名“ match”没有用单引号引起来时,MySQL引发错误?...
  6. python字典函数fromkeys()
  7. 密码学 / 哈希算法
  8. fetch获取解析json数据
  9. C# 中的 is 和 as 运算符 简单举例说明
  10. Centos 7 安装 PostgreSQL
  11. angular_directive动感超人
  12. owa outlook使用中的一些问题-陆续添加
  13. AD19自动布线出错,有些线未连接
  14. tomcat安装配置教程
  15. 三坐标检测之报告查看T值
  16. 面试考点:逻辑思维面试题(软件测试)
  17. MapReduce实现订单商品的统计
  18. 服务器并发量估算公式和计算方法
  19. UR 机器人HMI 交互界面开发记录
  20. 安装jre运行环境_如何下载安装java运行环境jre

热门文章

  1. python入门到精通需要学多久-入门到精通python要多久
  2. python将运行结果用窗口打开-如何打开新控制台并运行python脚本
  3. 数据分析软件python 对电脑的要求-数据分析5大软件PK,你最爱哪个?
  4. python3.6.0安装教程-Python 3.6.0下载及安装教程
  5. python英文单词-python常用150个英文单词
  6. python简单代码加法-CPython 源码中整数加法的实现
  7. python转行it好学吗-想转行学python过来人提醒大家几点
  8. python与excel做数据可视化-python数据可视化怎么做?excel可视化图表制作?
  9. python是c语言写的吗-python和C语言的差别
  10. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)