美文网首页
Go 语言中奇怪的 if 语句

Go 语言中奇怪的 if 语句

作者: 云爬虫技术研究笔记 | 来源:发表于2019-03-18 18:01 被阅读0次

常见的 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 语句也会变得困难。为了解决一个小问题而增加一种有问题的语法,看上去有点得不尝失。

相关文章

  • Go 语言中奇怪的 if 语句

    常见的 if 语句大约是这个样子的(C++): 这样有一个问题:变量 event 定义在了 if 语句的外面,也就...

  • go语言流程和函数(五)

    流程控制 if语句 go语言的if语句不需要括号,go语言的if还可以在条件判断的地方声明变量,go语言中的got...

  • Go语言之循环语句

    微信首发,欢迎关注: Go语言中的循环语句只有for,没有while和do/while这两种格式。Go语言中的fo...

  • 08-Go语言循环语句

    for循环语句 Go语言中只有一个for循环语句 四大跳转 break跳转 continue跳转

  • 理解 defer、panic 和 recover

    在 Go 语言中,有很多流程控制的语句,if、else 等等,这些流程控制的关键字在其他语言中也存在的但 Go 中...

  • Go编程基础(控制流程语句)

    现在来学习下go语言中控制流程语句,区别下其他语言不同的写法。 1.for循环 Go只有for一个循环语句关键字,...

  • TODO:Go语言goroutine和channel使用

    TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语...

  • 9. 循环

    9. 循环 循环语句是用来重复执行某一段代码。 for 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比...

  • Go 语言 break 语句

    Go 语言中 break 语句用于以下三方面: 用于循环语句中跳出循环,并开始执行循环之后的语句。 break 在...

  • go语言中的输出语句

网友评论

      本文标题:Go 语言中奇怪的 if 语句

      本文链接:https://www.haomeiwen.com/subject/lmmbmqtx.html