Go 语言变量作用域

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

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

  1. 函数内部定义的变量称为局部变量
  2. 函数外部定义的变量称为全局变量
  3. 函数定义中传的变量称为形式参数

局部变量

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

栗子~

 package main

 import (
"fmt"
) func plus() int{
//声明并初始化局部变量num1,num2
num1 := 10
num2 := 20
sum := num1 + num2
//和作为返回值返回
return sum
} func main(){
//调用plus函数并输出返回的结果
fmt.Println(plus())
/*这个执行会报错undefined: num1,因为这个num1的作用域在plus函数内,所以main函数是无法调用的
fmt.Println(num1)
*/
}

全局变量

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

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

 package main

 import (
"fmt"
) var (
//定义全局变量num1,numu2
num1 int = 10
num2 int = 20
)
func plus() int {
fmt.Println("plus函数内部调用num1:", num1)
fmt.Println("plus函数内部调用num2:", num2)
sum := num1 + num2
//和作为返回值返回
return sum
} func main(){
fmt.Println("plus函数返回的结果为:",plus())
fmt.Println("------------------------")
fmt.Println("main函数中调用num1:",num1)
fmt.Println("main函数中调用num2:",num2)
}

以上代码输出的返回结果为:

plus函数内部调用num1: 10
plus函数内部调用num2: 20
plus函数返回的结果为: 30
------------------------
main函数中调用num1: 10
main函数中调用num2: 20

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

 package main

 import (
"fmt"
) var (
//定义全局变量num1,numu2
num1 int = 10
num2 int = 20
)
func plus() int {
//内部的局部变量num1作用域要高于外部的num1.计算的时候会使用局部变量计算
num1 := 50
fmt.Println("plus函数内部调用num1:", num1)
fmt.Println("plus函数内部调用num2:", num2)
sum := num1 + num2
//和作为返回值返回
return sum
} func main(){
fmt.Println("plus函数返回的结果为:",plus())
fmt.Println("------------------------")
fmt.Println("main函数中调用num1:",num1)
fmt.Println("main函数中调用num2:",num2)
}

以上代码输出的返回结果为:

plus函数内部调用num1: 50
plus函数内部调用num2: 20
plus函数返回的结果为: 70
------------------------
main函数中调用num1: 10
main函数中调用num2: 20

形式参数

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

 package main

 import (
"fmt"
) //声明全局变量a
var a int = 20 func main(){
//局部变量
var a int = 10
var b int = 20
var c int = 0 fmt.Println("main函数中的a值:", a)
c = plus(a, b)
fmt.Println("main函数中的c值:", c) } func plus(a, b int) int {
//形参a,b的值来自于main函数中的局部变量的a,b两个赋值
fmt.Println("plus函数内部的a值:", a)
fmt.Println("plus函数内部的b值:", b)
return a + b
}

以上代码输出的返回结果为:

main函数中的a值: 10
plus函数内部的a值: 10
plus函数内部的b值: 20
main函数中的c值: 30

Go的变量作用域的更多相关文章

  1. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  2. [转]深入理解JavaScript的变量作用域

    1.JavaScript的作用域链 2.函数体内部,局部变量的优先级比同名的全局变量高. 3.JavaScript没有块级作用域. 4.函数中声明的变量在整个函数中都有定义. 5.未使用var关键字定 ...

  3. Java基础知识笔记(七:接口、变量作用域和参数传递)

    一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格 ...

  4. PHP常量、变量作用域详解(一)

    PHP 中的每个变量都有一个针对它的作用域,它是指可以在其中访问变量(从而访问它的值)的一个领域.对于初学者来说,变量的作用域是它们所驻留的页面.因此, 如果你定义了 $var,页面余下部分就可以访问 ...

  5. PHP变量作用域详解(二)

    学过C的人用PHP的时候一般会相当顺手,而且感到PHP太方便太轻松.但在变量作用域这方面却与C有不同的地方,搞不好会相当郁闷,就找不到错误所在.昨晚就与到这么一个问题,是全局变量在函数中的问题.今天搜 ...

  6. JavaScript函数定义和调用 变量作用域

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结   JavaScript中函数定义可以是这样的格式 function 函数名(参数) {     函数体 } 也可以是这样的格式     ...

  7. JavaScript 变量作用域

    一. 变量声明 变量用var关键字来声明,如下所示: 变量在未声明的情况下被初始化,会被添加到全局环境. JavaScript执行代码时,会创建一个上下文执行环境,全局环境是最外围的环境.每个函数在被 ...

  8. 变量作用域&函数作用域

    一. 变量作用域 1)全局变量 在全局环境下声明的变量被视为全局变量. 在没有使用var进行声明的时候,变量就被定义为全局变量.在ES5的严格模式下,如果变量没有使用var来声明是会报错的. 2)局部 ...

  9. OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...

  10. python的变量作用域问题

    偶然掉进了一个坑里.仔细分析了下原因.原来是变量作用域的问题.简单抽象如下: id=1 #许多行代码 [id for id in range(10)] #许多行代码 if id!=1: #做一些事情 ...

随机推荐

  1. 将ArrayList<HashMap<String, String>>转为ArrayList<Bundle>类型的解决方案

    Bundle是一种利用键值对存储的数据格式,而我们在程序中通常利用HashMap存储数据.在开发中,通过Http请求得到JSONArray类型的返回值,我选择利用ArrayList<HashMa ...

  2. [USACO09OCT]热浪Heat Wave

    未经同意,不得转载. The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make ...

  3. PHP获取文件夹中的所有文件(包括子目录)

    方法一: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 function tree($directory) ...

  4. 第一篇:webservice初探

    接触webservice也有一段时间了,为了查缺补漏,把知识点系统化,准备写几篇博文梳理下webservice的知识点,这是第一篇,对webservice进行大致的介绍. 1.什么是webservic ...

  5. @Component @Controller @Service @Repository@Resourse

    @Component @Controller @Service @Repository@Resourse这些全部是Spring提供的注解. 其中@Component用来表示把一个类纳入spring容器 ...

  6. 如何制作一个完美的全屏视频H5

    写在前面的话: 最近一波H5广告火爆整个互联网圈,身为圈内人,我们怎能     不! 知!道! :( 嘘!真不知道的也继续看下去,有收获 ↓ ) So,搞懂这个并不难. 这篇文章将带你从头到尾了解H5 ...

  7. (转)Java线程:新特征-条件变量

    Java线程:新特征-条件变量   条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往 ...

  8. (转)Mysql数据库存储引擎

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合.     我们通常说的MySql数据库,sql server数据库等 ...

  9. 动态rem与1px边框问题的理解

    当我们在项目开发中,拿到设计师的设计图,满怀欣喜的准备按照设计图将页面实现出来的时候,我们通常会遇到这个问题: 如何将页面的内容按照在不同手机屏幕浏览的情况下,比例都是不变的呢?这个时候我们就需要使用 ...

  10. 白话ASP.NET MVC之一:Url 路由

    好久没有写关于ASP.NET MVC的东西了,虽然<ASP.NET MVC4框架揭秘>已经完完整整的看完一遍,但是感觉和一锅粥差不多,没什么可写的,因为我自己不理解,也就写不出来.现在开始 ...