任何編程中的作用域是程序的一個區(qū)域,它定義了變量可以存在,并且在超出該變量范圍不能被訪問。 在Go編程語言中有三個可以聲明變量的地方:
下面來看看什么是局部變量和全局變量,以及什么是形式參數(shù)。
在函數(shù)或塊中聲明的變量稱為局部變量。 它們只能由在函數(shù)或代碼塊中的語句使用。局部變量對于它們自己以外的函數(shù)是未知的。以下是使用局部變量的示例。這里所有的變量a,b和c都是main()函數(shù)的局部變量。
package main
import "fmt"
func main() {
/* local variable declaration */
var a, b, c int
/* actual initialization */
a = 10
b = 20
c = a + b
fmt.Printf ("value of a = %d, b = %d and c = %d\n", a, b, c)
}
當上述代碼編譯和執(zhí)行時,它產(chǎn)生以下結(jié)果:
value of a = 10, b = 20 and c = 30
全局變量在函數(shù)之外定義,通常在程序之上。 全局變量將在程序的整個生命周期中都有保持它的值,并且可以在程序定義的任何函數(shù)內(nèi)訪問到它們。
全局變量可以通過任何函數(shù)訪問。 也就是說,一個全局變量可以聲明后在整個程序中使用。 以下是使用全局變量和局部變量的示例:
package main
import "fmt"
/* global variable declaration */
var g int
func main() {
/* local variable declaration */
var a, b int
/* actual initialization */
a = 10
b = 20
g = a + b
fmt.Printf("value of a = %d, b = %d and g = %d\n", a, b, g)
}
當上述代碼編譯和執(zhí)行時,它產(chǎn)生以下結(jié)果:
value of a = 10, b = 20 and g = 30
在程序中,局部變量和全局變量的名稱可以相同,但函數(shù)內(nèi)部的局部變量的值將優(yōu)先(也就是說局部變量會覆蓋全局變量)。 以下是一個示例:
package main
import "fmt"
/* global variable declaration */
var g int = 20
func main() {
/* local variable declaration */
var g int = 10
fmt.Printf ("value of g = %d\n", g)
}
當上述代碼編譯和執(zhí)行時,它產(chǎn)生以下結(jié)果:
value of g = 10
函數(shù)參數(shù) - 形式參數(shù)在函數(shù)中會作為局部變量,它們將優(yōu)先于全局變量。以下是一個示例:
package main
import "fmt"
/* global variable declaration */
var a int = 20;
func main() {
/* local variable declaration in main function */
var a int = 10
var b int = 20
var c int = 0
fmt.Printf("value of a in main() = %d\n", a);
c = sum( a, b);
fmt.Printf("value of c in main() = %d\n", c);
}
/* function to add two integers */
func sum(a, b int) int {
fmt.Printf("value of a in sum() = %d\n", a);
fmt.Printf("value of b in sum() = %d\n", b);
return a + b;
}
當上述代碼編譯和執(zhí)行時,它產(chǎn)生以下結(jié)果:
value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30
當一個局部變量作為全局變量被初始化為它們對應的零值時。指針初始化為nil。
| 數(shù)據(jù)類型 | 初始默認值 |
|---|---|
| int | 0 |
| float32 | 0 |
| 指針 | nil |