欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

go局部变量和全局变量

程序员文章站 2022-05-28 14:01:46
...
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