go局部变量和全局变量

go用const关键字定义常量,用var关键字定义变量。定义的方式:var {key} {type}
定义单个对象:
var str string = "hello"

定义多个统一类型:
var p, q float32 = 1.1, 2.2

或:
var (
	k = 1
	t = 2
)

注意:string和float32可以去掉,编译器会自动判断。

一个变量在定义之后在程序有一定范围可以使用,我们成为作用域,根据作用域大小,我们可以分为全局变量和局部变量。在函数外声明的变量称为全局变量,可以在函数中随意用。在函数中声明的对象,作用域只在这个函数中,我们称为局部变量,下面来个例子说明一下:
package main

var a = "G"

var (
	k = 1
	t = 2
)

var p, q float32 = 1.1, 2.2

func main() {
	var a string
	a = "t"
	b := "q"
	n()
	m()
	n()
	print("main :\n")
	print(a, b, q, p)
}

func n() {
	print(a)
}

func m() {
	a = "O"
	print(a)
}

上面例子中: a,k,t,p,q都是全局变量,在函数外声明
在main函数中,a,b为局部变量。
注意::a既是局部变量,又是全局变量。
:=也是一种赋值方法,省略关键字var 会自动判断变量类型。
解析:函数从main方法开始执行,方法体
第一行:定义a为string类型变量
第二行:把字符串t赋值给a
第三行:定义b为string类型并把字符串q赋值给它。
第四行:执行n函数,输出a,这个a取的全局变量,所以输出G
第五行:执行m函数,先把全局变量a变成O,所以输出O
第六行:执行n函数,因为a在m函数中变成O,所以n输出O
第八行:输出a,b,q,p的值,这里的a取的是局部变量a,所以是t。
注意如果把var a string注释掉,a=“t”就修改的全局变量,这样结果就完全不同。

结论:函数中如果重新定义了全局变量,那么函数中会把全局变量的值隐藏掉。
全局变量定义了没有被引用不会报错
局部变量定义了没有被引用会报错:declared and not used

猜你喜欢

转载自studypi.iteye.com/blog/2391334