Go的变量作用域

Go 语言变量作用域

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

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

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

局部变量

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

栗子~

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 func plus() int{
 8     //声明并初始化局部变量num1,num2
 9     num1 := 10
10     num2 := 20
11     sum := num1 + num2
12     //和作为返回值返回
13     return sum
14 }
15
16 func main(){
17     //调用plus函数并输出返回的结果
18     fmt.Println(plus())
19     /*这个执行会报错undefined: num1,因为这个num1的作用域在plus函数内,所以main函数是无法调用的
20     fmt.Println(num1)
21     */
22 }

全局变量

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

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

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 var (
 8     //定义全局变量num1,numu2
 9     num1 int = 10
10     num2 int = 20
11 )
12 func plus() int {
13     fmt.Println("plus函数内部调用num1:", num1)
14     fmt.Println("plus函数内部调用num2:", num2)
15     sum := num1 + num2
16     //和作为返回值返回
17     return sum
18 }
19
20 func main(){
21     fmt.Println("plus函数返回的结果为:",plus())
22     fmt.Println("------------------------")
23     fmt.Println("main函数中调用num1:",num1)
24     fmt.Println("main函数中调用num2:",num2)
25 }

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

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

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

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 var (
 8     //定义全局变量num1,numu2
 9     num1 int = 10
10     num2 int = 20
11 )
12 func plus() int {
13     //内部的局部变量num1作用域要高于外部的num1.计算的时候会使用局部变量计算
14     num1 := 50
15     fmt.Println("plus函数内部调用num1:", num1)
16     fmt.Println("plus函数内部调用num2:", num2)
17     sum := num1 + num2
18     //和作为返回值返回
19     return sum
20 }
21
22 func main(){
23     fmt.Println("plus函数返回的结果为:",plus())
24     fmt.Println("------------------------")
25     fmt.Println("main函数中调用num1:",num1)
26     fmt.Println("main函数中调用num2:",num2)
27 }

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

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

形式参数

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

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 //声明全局变量a
 8 var a int = 20
 9
10 func main(){
11     //局部变量
12     var a int = 10
13     var b int = 20
14     var c int =  0
15
16     fmt.Println("main函数中的a值:", a)
17     c = plus(a, b)
18     fmt.Println("main函数中的c值:", c)
19
20 }
21
22 func plus(a, b int) int {
23     //形参a,b的值来自于main函数中的局部变量的a,b两个赋值
24     fmt.Println("plus函数内部的a值:", a)
25     fmt.Println("plus函数内部的b值:", b)
26     return a + b
27 }

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

main函数中的a值: 10
plus函数内部的a值: 10
plus函数内部的b值: 20
main函数中的c值: 30
时间: 2024-11-06 23:28:02

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

js的变量,变量作用域,作用域链

变量声明: 使用var关键字声明,如果使用没有声明的变量,则JS会自动声明此变量根据变量作用域.如果变量只声明为赋值,则此时值是undefined.重复声明变量,在JS不会报错,会依据最后一次的声明来处理变量. 变量作用域: 一个变量的作用域是,程序代码定义这个变量的区域,全局变量在程序代码内任何地方都可以访问. 包括在{}函数,对象内的变量(属性)成为局部变量. 在函数体内定义的变量成为局部变量,作用域也是局部,函数参数也是局部变量. 他们只在函数体内有意义. 在函数体内,局部变量优先于全局变

Sass学习笔记 -- 变量及变量作用域历史遗留问题

sass有两种后缀名文件: 一种后缀名为sass,写选择器时不能使用大括号和分号 一种后缀名为scss,使用大括号和分号 //后缀名为sass的语法,不能出现大括号和分号 $highlight-color: #abcdef .selected   border: 1px $highlight-color solid    //后缀名为scss的语法,跟css一样,需要大括号和分号 $highlight-color: #abcdef; .selected{   border:1px solid $

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

一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格式如下: [接口修饰词列表] interface 接口名 [extends 接口名称列表] { 接口体 } 接口修饰词列表可以包含0个.1个或者多个接口修饰词.如果存在多个接口修饰词,则在相邻两个接口修饰词之间采用空格分隔开.接口修饰词包括:public.abstract和strictfp等.在同一

less的结构嵌套和变量作用域

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title></title>     <style type="text/less">         /*         结构嵌套和变量作用域         样式的结构可以像html结构来一样嵌套,并对应其样式.  

JavaScript基础之函数和变量作用域

函数:封装一项任务的步骤清单的代码段,再起一个名字 ( js中函数也是一个引用类型的对象,函数名其实也是引用函数对象的普通变量.) 函数对象:内存中专门存储一个函数定义的存储空间 函数定义的存储位置在window之外. 何时使用:一项任务可能反复使用时,就仅需要在函数中封装一次,反复调用函数即可. 如何声明函数: function 函数名([参数1,参数2,...]){ 步骤清单 return 返回值 } 参数:专门接受函数调用时,必要数据的变量 如何使用参数:在函数内,参数变量的使用和普通变量

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

1.JavaScript的作用域链 2.函数体内部,局部变量的优先级比同名的全局变量高. 3.JavaScript没有块级作用域. 4.函数中声明的变量在整个函数中都有定义. 5.未使用var关键字定义的变量都是全局变量. 6.全局变量都是window对象的属性 在学习JavaScript的变量作用域之前,我们应当明确几点: JavaScript的变量作用域是基于其特有的作用域链的. JavaScript没有块级作用域. 函数中声明的变量在整个函数中都有定义. 1.JavaScript的作用域链

OC点语法和变量作用域

OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 { 5 int _age;//默认为@protected 6 } 7 8 - (void)setAge:(int)age; 9 - (int)age; 10 11 @end Person类的实现: 1 #import "Person.h" 2 3 @imp

文件载入流程,函数的使用【函数名,参数【按引用赋值的问题】,函数体,【变量作用域和生命周期】】

1.求最大公约数辗转相除求值例如:12,8求最大公约数12%8=4[不为零]8%4=0[为零,则4为最大公约数][原理就是12,8的最大公约数和8,4的最大公约数一致][这个问题已经可被证明]计算机中最早的算法 2.文件载入---流程[php执行的先后顺序][php对代码的编译以文件为单位]先检查一个文件中的语法再进行编译然后才会一行行解释执行 [这一点需要注意]这里进行文件载入的流程讲解:php文件载入时,被引入的文件中的语法并不会解析,只有当该文件被执行[也就是被引入语句之后的部分才会报错]

C# 变量作用域

变量作用域是一个让很多初学者很容易混淆的一个概念. 变量的作用域是可以访问该变量的代码区域.一般情况下,确定作用域遵循以下规则: 只要类在某个作用域中,其字段也(也称成员变量)也在该作用域内. 局部变量存在于表示声明该变量的块语句或方法结束的右花括号({})之前的作用域内.(请认真解读读透这句话) 在for.while或类似语句中声明的局部变量存在于该循环体内. 局部变量的作用域冲突 大型程序在不同部分的变量使用相同的变量名很常见.只要变量的作用域是程序的不同部分,就不会有问题,就不会产生多义性

C语言-数据类型、常量、变量、变量作用域、printf、scanf函数

4.数据类型介绍 数据:文本数据.音频.视频.图像.数字 C语言中有5大数据类型:基本类型.构造类型.空类型.指针类型.自定义类型 基本数据类型: 整型    长整型long int    整型int(4)    端整型short int 实型    单精度float(4)    双精度 double(8) 字符型   char(1) 内存: 1> 内存分配:4G存储大小:4*1024*1024*1024Byte; 内存的基本单元为一个字节(就是8bit) 2> 内存区域:栈 (存放局部变量)