Go函数与变量
变量查找顺序
package main
import "fmt"
var a = 100
func main(){
fmt.Println(a) //输出100
}
package main
import "fmt"
var a = 100
func main(){
a := 99
fmt.Println(a) //输出99
}
package main
import "fmt"
var a = 100
func f1(){
fmt.Println(a)
}
func main(){
a := 99
fmt.Println(a) //先使用一下a要不然编译不过.输出99
f1() //输出100
}
package main
import "fmt"
var a = 100
func f1(){
fmt.Println(a)
}
func main(){
if a:= 10; a<100{
fmt.Println(a) //输出10
f1() //输出100
}
}
小结
- 函数会先在函数体内找变量
- 函数体内没有,会去找全局变量
- 被调用的函数,无法找到调用者函数体内定义的变量
参数查找顺序
package main
import "fmt"
var a = 100
func f1(x int){
fmt.Println(x)
}
func main(){
a := 99
f1(a) //输出99
}
package main
import "fmt"
var a = 100
func f1(x int){
fmt.Println(x)
}
func main(){
f1(a) //输出100
}
package main
import "fmt"
var a = 100
func f1(x int){
fmt.Println(x)
}
func main(){
if a:=10; a<100{
f1(a) //输出10
}
}
小结:
1.1被调用的函数会先从调用者函数内找参数
1.2如果调用者函数内没有找到,会去全局变量里找
1.3如果被调用的函数在块内,会先从块级变量找起然后向外找变量
变量作用域
package main
import "fmt"
//全局变量, 如果首字母大写就是包级全局变量
var a = 100 //全局变量
func f1(x int){
fmt.Println(x)
}
func main(){
a := 1000 //函数级变量,函数外无法使用
fmt.Println(a)
if b:=10; b<100{
fmt.Println(b) //块级变量,
}
//b变量已经销毁,无法使用
fmt.Println(b) //报错undefined: b
}
小结
Go中变量的作用域(作用范围有三种)
- 全局变量
- 函数级变量
- 块级变量
作用范围依次减小。