首页 > 其他分享 >无涯教程-Go - 作用域

无涯教程-Go - 作用域

时间:2023-12-20 10:31:40浏览次数:23  
标签:全局变量 作用域 fmt 局部变量 无涯 value int Go main

任何编程中的作用域是程序中可以存在定义的变量并且不能访问该变量的区域,在三个地方可以使用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。

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

参考链接

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

标签:全局变量,作用域,fmt,局部变量,无涯,value,int,Go,main
From: https://blog.51cto.com/u_14033984/8903683

相关文章

  • ArgoCD 添加私有仓库
    HTTPS方式访问私有仓库ArgoCDCLI添加私有仓库#argocdrepoaddhttps://github.com/argoproj/argocd-example-apps--username<username>--password<password>dashboard添加私有仓库SSHPrivateKeyCredentialArgoCDCLI添加known_hosts#ssh-keyscan-p3......
  • 无涯教程-Go - 常量类型
    常量是指程序在执行过程中不得更改的固定值。整数类型整数文字可以是十进制,八进制或十六进制常量,前缀指定基数或基数:十六进制为0x或0X,八进制为0,十进制为空。整数文字也可以具有后缀,该后缀是U和L的组合,分别表示无符号和长整数,后缀可以是大写或小写,并且可以是任何顺序。212......
  • GoFrame Goland插件
    前言GoFrame是一款模块化、高性能、企业级的Go基础开发框架。GoFrame是一款通用性的基础开发框架,是Golang标准库的一个增强扩展级,包含通用核心的基础开发组件,优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队。GoFrame既可用于开发完整的工程化项......
  • 数据备份软件GoodSync
    为什么需要数据备份软件?重要的数据无价,而一块机械硬盘的理论使用寿命是5-10年。一块盘里的数据更改,希望能及时、正确,备份到另外一块硬盘里。只想备份更改,不想全盘备份。毕竟有的情况下会有动辄几十TB的数据。那能不能使用云服务?免费云服务的速度并不理想。部分资源可能会......
  • 无涯教程-Java - 线程控制函数
    核心Java提供了对多线程程序的完全控制,您可以开发一个多线程程序,该程序可以根据您的要求完全挂起,恢复或停止。您可以对线程对象使用各种静态方法来控制其行为。下表列出了这些方法-Sr.No.Method&Remark1publicvoidsuspend()该方法将线程置于挂起状态,可以使用resume()......
  • golang快速入门:结构体
    结构体Go语言的面向对象编程与我们之前所熟悉的PHP、Java那一套完全不同,没有 class、extends、implements 之类的关键字和相应的概念,而是借助结构体来实现类的声明。typePersonstruct{namestring//名字malebool//性别}可以理解为类名 Person,并且包含了 ......
  • 无涯教程-Java - 处理线程死锁函数
    死锁描述了一种情况,其中两个或多个线程永远被阻塞,互相等待,当多个线程需要相同的锁但以不同的顺序获得它们时,就会发生死锁。Java多线程程序可能会遇到死锁情况,因为synchronized关键字会导致正在执行的线程在等待与指定对象关联的锁时被阻塞。这是一个示例。publicclassTestT......
  • 无涯教程-URL Processing函数
    URL代表"统一资源定位器",代表万维网上的资源,例如网页或FTP目录。本节向您展示如何编写与URL通信的Java程序。URL可以分为以下部分:protocol://host:port/path?query#ref例sofprotocolsincludeHTTP,HTTPS,FTP,andFile.Thepathisalsoreferredtoasthefilen......
  • django中cookie的使用
    cookie是在客户端的键值对  #0会话跟踪,会话保持#1cookie规范 -记住:当前网站在浏览器上cookie个数和大小有限制 -Cookie大小上限为4KB; -一个服务器最多在客户端浏览器上保存20个Cookie; -一个浏览器最多保存300个Cookie;#2django中操作cookie -增:obj.set_cookie('key......
  • 无涯教程-Java - Comparator 比较器函数
    TreeSet和TreeMap都按排序顺序存储元素。但是,比较器(Comparator)精确地定义了排序顺序的含义。比较器(Comparator)接口定义了两个方法:compare()和equals()。Compare方法intcompare(Objectobj1,Objectobj2)obj1和obj2是要比较的对象。如果对象相等,则此方法返回零。如果obj......