go局部变量和全局变量
程序员文章站
2022-05-28 14:01:46
...
go用const关键字定义常量,用var关键字定义变量。定义的方式:var {key} {type}
定义单个对象:
定义多个统一类型:
或:
注意:string和float32可以去掉,编译器会自动判断。
一个变量在定义之后在程序有一定范围可以使用,我们成为作用域,根据作用域大小,我们可以分为全局变量和局部变量。在函数外声明的变量称为全局变量,可以在函数中随意用。在函数中声明的对象,作用域只在这个函数中,我们称为局部变量,下面来个例子说明一下:
上面例子中: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
定义单个对象:
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
推荐阅读
-
从局部变量和全局变量开始全面解析Python中变量的作用域
-
10.Go-goroutine,waitgroup,互斥锁,channel和select
-
从局部变量和全局变量开始全面解析Python中变量的作用域
-
9.Go-反射、日志和线程休眠
-
Python和GO语言实现的消息摘要算法示例
-
PHP变量作用域(全局变量&局部变量)&global&static关键字用法实例分析
-
C# 7.0之ref locals and returns(局部变量和引用返回)
-
php全局变量有哪些(php的安装和配置教程)
-
Python3.5局部变量与全局变量作用域实例分析
-
php全局变量有哪些(php的安装和配置教程)