[英]Return 1 value to the function with multiple return values in golang
[英]Golang: Scope of multi return values from function
當一個函數在Golang中返回多個變量時,這些變量的作用域是什么? 在所附的代碼中,我無法確定b的范圍。
package main
import (
"fmt"
)
func addMulti(x, y int) (int, int) {
return (x + y), (x * y)
}
func main() {
//what is the scope of the b variable here?
a, b := addMulti(1, 2)
fmt.Printf("%d %d\n", a, b)
//what is the scope of the b variable here?
c, b := addMulti(3, 4)
fmt.Printf("%d %d\n", c, b)
}
我們不是在談論函數的返回值的范圍,而是在您將返回值分配給的變量的范圍。
從您聲明變量的角度出發,變量b
的范圍是函數主體。
首先,您可以在此行執行此操作:
a, b := addMulti(1, 2)
但是,然后在此行使用另一個Short Variable聲明 :
c, b := addMulti(3, 4)
由於已經聲明了b
因此只為其分配了一個新值。 b
將一直保持作用域,直到main()
函數結束。 引用Go語言規范:
與常規變量聲明不同,短變量聲明可以重新聲明變量,前提是它們最初是在同一塊中以相同類型早先聲明的,並且至少一個非空白變量是新變量。 因此,重新聲明只能出現在多變量簡短聲明中。 重新聲明不會引入新變量; 它只是為原始值分配一個新值。
這是一個塊內的普通變量。 從規格 :
在函數內部聲明的常量或變量標識符的范圍始於ConstSpec或VarSpec的末尾(對於簡短變量聲明,為ShortVarDecl),並終止於最里面的包含塊的末尾。
在第二個調用中,您只是重新分配了相同的b
變量的值。 其范圍是相同的。
b變量的范圍是main.main()
。 在第二個分配c, b := addMulti(3, 4)
引入新變量c,並分配在第一次分配中引入的變量b。 如果將第二個賦值更改為a, b := addMulti(3, 4)
與第a, b := addMulti(3, 4)
賦值相同,它不想編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.