Go 语言变量作用域

简介: Go 语言变量作用域

作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。

Go 语言中变量可以在三个地方声明:

  • 函数内定义的变量称为局部变量
  • 函数外定义的变量称为全局变量
  • 函数定义中的变量称为形式参数

接下来让我们具体了解局部变量、全局变量和形式参数。


局部变量

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。

以下实例中 main() 函数使用了局部变量 a, b, c:

实例

package main


import "fmt"


func main() {

  /* 声明局部变量 */

  var a, b, c int


  /* 初始化参数 */

  a = 10

  b = 20

  c = a + b


  fmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c)

}

以上实例执行输出结果为:

结果: a = 10, b = 20 and c = 30


全局变量

在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。

全局变量可以在任何函数中使用,以下实例演示了如何使用全局变量:

实例

package main


import "fmt"


/* 声明全局变量 */

var g int


func main() {


  /* 声明局部变量 */

  var a, b int


  /* 初始化参数 */

  a = 10

  b = 20

  g = a + b


  fmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)

}

以上实例执行输出结果为:

结果: a = 10, b = 20 and g = 30

Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。实例如下:

实例

package main


import "fmt"


/* 声明全局变量 */

var g int = 20


func main() {

  /* 声明局部变量 */

  var g int = 10


  fmt.Printf ("结果: g = %d\n",  g)

}

以上实例执行输出结果为:

结果: g = 10


形式参数

形式参数会作为函数的局部变量来使用。实例如下:

实例

package main


import "fmt"


/* 声明全局变量 */

var a int = 20;


func main() {

  /* main 函数中声明局部变量 */

  var a int = 10

  var b int = 20

  var c int = 0


  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;

}

以上实例执行输出结果为:

main()函数中 a = 10

sum() 函数中 a = 10

sum() 函数中 b = 20

main()函数中 c = 30


初始化局部和全局变量

不同类型的局部和全局变量默认值为:

数据类型 初始化默认值
int 0
float32 0
pointer nil
目录
相关文章
|
17天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
26 7
|
16天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
17天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
92 71
|
16天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
17天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
18天前
|
Go 索引
go语言修改元素
go语言修改元素
25 6
|
8天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
19天前
|
开发框架 Go 计算机视觉
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
|
1月前
|
Go 数据安全/隐私保护 开发者
Go语言开发
【10月更文挑战第26天】Go语言开发
39 3
|
1月前
|
Java 程序员 Go
Go语言的开发
【10月更文挑战第25天】Go语言的开发
32 3