Go - 作用域

Go - 作用域 首页 / Golang入门教程 / Go - 作用域

任何编程中的作用域是程序中可以存在定义的变量并且不能访问该变量的区域,在三个地方可以使用Go编程语言声明变量-

  • 在函数或块内( local 变量)

  • 所有函数之外( global变量)

  • 在函数参数中( formal参数)

让我们找出什么是 local 和 global 变量以及什么是 formal 参数。

局部变量

在函数或块内声明的变量称为局部变量,它们只能由该函数或代码块中的语句使用,以下示例使用局部变量。在这里,所有变量a,b和c都是main()函数的局部变量。

package main

import "fmt"

func main() {
   /* 局部变量声明 */
   var a, b, c int 

   /* 实际初始化 */
   a=10
   b=20
   c=a + b

   fmt.Printf ("value of a=%d, b=%d and c=%d\n", a, b, c)
}

编译并执行上述代码后,将产生以下输出-

无涯教程网

value of 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("value of a=%d, b=%d and g=%d\n", a, b, g)
}

编译并执行上述代码后,将产生以下输出-

无涯教程网

value of a=10, b=20 and g=30

程序的局部变量和全局变量可以具有相同的名称,但是函数内局部变量的值优先。如-

package main

import "fmt"
 
/* 全局变量声明 */
var g int=20
 
func main() {
   /* 局部变量声明 */
   var g int=10
 
   fmt.Printf ("value of g=%d\n",  g)
}

编译并执行上述代码后,将产生以下输出-

无涯教程网

value of g=10

参数变量

Formal参数在该函数中被视为局部变量,并且它们优先于全局变量。如-

package main

import "fmt"
 
/* 全局变量声明 */
var a int=20;
 
func main() {
   /* 主函数中的局部变量声明 */
   var a int=10
   var b int=20
   var c int=0

   fmt.Printf("value of a in main()=%d\n",  a);
   c=sum( a, b);
   fmt.Printf("value of c in main()=%d\n",  c);
}
/* 两个整数相加的函数 */
func sum(a, b int) int {
   fmt.Printf("value of a in sum()=%d\n",  a);
   fmt.Printf("value of b in sum()=%d\n",  b);

   return a + b;
}

编译并执行上述代码后,将产生以下输出-

无涯教程网

value of a in main()=10
value of a in sum()=10
value of b in sum()=20
value of c in main()=30

初始化变量

局部变量和全局变量被初始化为其默认值0。而指针初始化为nil。

链接:https://www.learnfk.comhttps://www.learnfk.com/go/go-scope-rules.html

来源:LearnFk无涯教程网

数据类型初始默认值
int 0
float32 0
pointer nil

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Android开发高手课 -〔张绍文〕

高并发系统设计40问 -〔唐扬〕

Django快速开发实战 -〔吕召刚〕

代码之丑 -〔郑晔〕

etcd实战课 -〔唐聪〕

基于人因的用户体验设计课 -〔刘石〕

说透区块链 -〔自游〕

业务开发算法50讲 -〔黄清昊〕

快手 · 移动端音视频开发实战 -〔展晓凯〕

好记忆不如烂笔头。留下您的足迹吧 :)