Golang Switch变量范围

时间:2018-05-14 15:29:04

标签: variables go scope switch-statement

我试图弄清楚Golang中的简单切换,而我却陷入了变量范围。

print("Starting program")
val futureA = taskA()

futureA onComplete{
case Success(_) => print("future suceeded")
case Failure(_) => print("not able to execute future")
}

Await.result(futureA, Duration.Inf)

我已经在切换之前声明了resp,body,errs和req,并且我认为它们将在切换体之后可用。 编译器返回的是错误(来自案例声明)

15:18:52.357 [main] Starting program
15:18:52.563 [scala-execution-context-global-13] Starting nested future
15:18:52.564 [scala-execution-context-global-12] starting outer future
15:18:53.564 [scala-execution-context-global-12] finished outer future
15:18:53.566 [scala-execution-context-global-12] future suceeded

Process finished with exit code 0

所以我很好奇是开关体内的变量范围与函数中声明的有些不同吗?这段代码如何能够在切换体之后访问数据。

1 个答案:

答案 0 :(得分:3)

您的问题在这一行:

resp, body, errs := req.Get(suburl)

短变量声明运算符:= 创建新变量并为它们赋值。这些 new 变量被称为“遮蔽”您在外部作用域中创建的变量,因为它们具有相同的名称,因此它们“隐藏”该作用域内的外部作用域变量。要解决此问题,只需将值从外部作用域分配给现有变量,而不是创建新的变量:

resp, body, errs = req.Get(suburl)

请注意此处使用作业=而非简短声明:=