Golang作用域—坑
2024-08-26 05:36:44
先举个栗子,全局作用域变量,与 := 符号声明赋值新变量
package main import "fmt" var a = "GG" func main() {
n()
m()
n()
}
func n() {
fmt.Println(a)
}
func m() {
// 对于 := 定义的变量,新变量a与全局已定义的a变量同名,不在一个作用域
//所以golong定义新的变量a。遮住全局变量a,所以m()打印"66"
a := ""
fmt.Println(a)
}
局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。
以下实例中 main() 函数使用了局部变量 a, b, c:
package main import "fmt" func main() {
/* 声明局部变量 */
var a, b, c int /* 初始化参数 */
a =
b =
c = a + b fmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c)
}
局部变量声明
全局变量
在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。
全局变量可以在任何函数中使用,以下实例演示了如何使用全局变量:
package main import "fmt" /* 声明全局变量 */
var g int func main() { /* 声明局部变量 */
var a, b int /* 初始化参数 */
a =
b =
//调用全局变量声明的g
g = a + b fmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)
}
全局变量引用
Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。实例如下:
package main import "fmt" /* 声明全局变量 */
var g int = func main() {
/* 声明局部变量 */
var g int = fmt.Printf ("结果: g = %d\n", g)
} //结果是g = 10 ,优先考虑局部变量
形式参数
形式参数会作为函数的局部变量来使用。
package main import "fmt" /* 声明全局变量 */
var a int = ; func main() {
/* main 函数中声明局部变量 */
var a int =
var b int =
var c int = fmt.Printf("main()函数中 a = %d\n", a);
c = sum( a, b);
fmt.Printf("main()函数中 c = %d\n", c);
} /* 函数定义-两数相加 */
func sum(a, b int) int {
fmt.Printf("sum() 函数中 a = %d\n", a);
fmt.Printf("sum() 函数中 b = %d\n", b); return a + b;
}
形式参数
初始化局部和全局变量
不同类型的局部和全局变量默认值为:
数据类型 | 初始化默认值 |
---|---|
int | 0 |
float32 | 0 |
pointer | nil |
最新文章
- css样式
- Centos6 安装 Redis
- Android开发环境搭建全程演示(jdk+eclipse+android sdk)
- 【MyEclipse 2015】 逆向破解实录系列【1】(纯研究)
- graph_tool源码及其注释
- [css3]搜索框focus时变长
- Android改变了PDA市场格局
- linux标准输入输出重定向
- json对象与字符串的相互转换,数组和字符串的转换
- [Immutable.js] Lightning Fast Immutable.js Equality Checks with Hash Codes
- POJ 2226 Muddy Fields(最小顶点覆盖)
- Redmine管理项目3-调整用户显示格式
- IOS开发中摇一摇是怎么实现的
- SSM-SpringMVC-06:SpringMVC关于静态资源无法展示的问题
- java8中stream的map和flatmap的理解
- 论文阅读笔记三十四:DSSD: Deconvolutiona lSingle Shot Detector(CVPR2017)
- WPF应用程序exe接收参数
- python cook 2
- 【WPF】对话框/消息弹窗
- web之前端获取上传图片并展示