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

Go语言【第八篇】:Go语言变量作用域的更多相关文章

  1. go语言学习入门篇1---go语言的主要特性与发展

    1.1 影响 Go 语言发展的早期编程语言 正如 "21 世纪的 C 语言" 这句话所说,Go 语言并不是凭空而造的,而是和 C++.Java 和 C# 一样属于 C 系.不仅如此 ...

  2. 从零开始学习R语言(八)——R语言绘图

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/74051739 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125683 ...

  3. 第十八篇 js高级知识---作用域链

    一直有想法去写写js方面的东西,我个人是最喜欢js这门语言,喜欢的他的自由和强大,虽然作为脚本语言有很多限制的地方,但也不失为一个好的语言,尤其是在H5出现之后.下面开始说说js的方面的东西,由于自己 ...

  4. C++基础知识篇:C++ 变量作用域

    作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量. 在函数参数的定义中声明的变量,称为形式参数. 在所有函数外部声明的变量,称为全局变量. 我们 ...

  5. [刘阳Java]_步步窥探JS变量作用域

    今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习 ...

  6. 第二篇 -- Go语言转义字符与变量声明

    上节我们讲了GO语言的环境搭建以及创建了Hello World程序.今天学习一下Go语言基础语法 开发前准备 1. 首先创建一个Project02 2. 在Project02下面新建一个test1.g ...

  7. 如何设计一门语言(八)——异步编程和CPS变换

    关于这个话题,其实在(六)里面已经讨论了一半了.学过Haskell的都知道,这个世界上很多东西都可以用monad和comonad来把一些复杂的代码给抽象成简单的.一看就懂的形式.他们的区别,就像用js ...

  8. C语言第八讲,指针*

    C语言第八讲,指针* 一丶简单理解指针 说到指针,很多人都说是C语言的重点. 也说是C语言的难点. 其实指针并不是难.而是很多人搞不清地址 和 值.以及指针类型. 为什么这样说. 假设有两个变量,如下 ...

  9. ios开发——面试篇C语言精华

    面试篇C语言精华    1.面向过程:分析解决问题所需要的步骤,然后用函数把这些步骤一步一步实 现. 面向对象:直接描述客观世界的对象及其相互关系.现实世界中任何实体都 可以看作是对象,对象之间通过消 ...

随机推荐

  1. 利用Python Counter快速计算出现次数topN的元素

    需要用Python写一段代码,给定一堆关键词,返回出现次数最多的n个关键字. 第一反应是采用一个dict,key存储关键词,value存储出现次数,如此一次遍历即可得出所有不同关键词的出现次数,而后排 ...

  2. 感觉总结了一切python常见知识点,可直接运行版本

    #encoding=utf-8#http://python.jobbole.com/85231/#作用域a=1def A(a): a=2 print 'A:',a def B(): print 'B: ...

  3. VMware 15.0下载及安装教程

    虚拟机 VMware WorkStation Pro15 下载及安装详细解 9虚拟机 VMware WorkStation Pro15 下载及安装详细解. 虚拟机官方网站: https://www.v ...

  4. Python里//与/的区别?

    1.Python里面//的作用是除法取整,也就是直接取整数部分 例如:5//6=0; 56//3=18 2.而/的作用是直接进行常规的除法运算 例如:56/8=7 程序运算实例如下:

  5. Python常用函数--return 语句

    在Python教程中return 语句是函数中常用的一个语句.return 语句用于从函数中返回,也就是中断函数.我们也可以选择在中断函数时从函数中返回一个值.案例(保存为 function_retu ...

  6. 【WXS全局对象】Date

    属性: 名称 说明 Date.parse( [dateString] ) 解析一个日期时间字符串,并返回 1970/1/1 午夜距离该日期时间的毫秒数. Date.UTC(year,month,day ...

  7. 【Linux 运维】Centos7初始化网络配置

    设置网络 (1)动态获取一个IP地址 #dhclient        系统自动自动获取一个IP地址#ip addr         查看获取的ip地址(2)查看网关,子网掩码 虚拟机编辑>虚拟 ...

  8. 【未完】训练赛20190304:KMP+树状数组+线段树+优先队列

    头炸了啊,只做出L题,前两天刚看的Shawn zhou的博客学习的,幸亏看了啊,否则就爆零了,发现题目都是经典题,线段树,KMP,我都没看过,最近又在复习考研,真后悔大一大二没好好学习啊,得抽时间好好 ...

  9. [2017 - 2018 ACL] 对话系统论文研究点整理

    (论文编号及摘要见 [2017 ACL] 对话系统. [2018 ACL Long] 对话系统. 论文标题[]中最后的数字表示截止2019.1.21 google被引次数) 1. Domain Ada ...

  10. sql随机数

    ) as P_jsnews_id ) as P_jsnews_id) * from P_jsnews order by newid()