20180831-Go Variables Scope

20180831-Go Variables Scope


preface:

艰难入门golang ing…


Keyword :

what

什么是作用域?

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

Go中变量的声明:

可以在三个地方声明:

  • 函数定义的变量称为 局部变量
  • 函数定义的变量称为 全局变量
  • 函数定义的变量称为 形式参数

什么是局部变量?

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

A variable (constant, type, function) is only known in a certain range of the program, called the scope.

感觉英文的描述理解起来会更准确,你是知道这个变量的确切使用范围之后,你才将其declared的,它只在这个范围内 visible and available

示例:

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)
}

什么是全局变量?

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

全局变量可以在任何函数中使用.

Variables etc. declared outside of any function (in other words at the top level) have global (or package) scope:

they are visible and available in all source files of the package.

示例:

package main

import "fmt"

/* 声明全局变量 */
var g int

func main() {

   /* 声明局部变量 */
   var a, b int

   /* 初始化参数 */
   a = 10
   b = 20
    //调用全局变量声明的g
   g = a + b

   fmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)
}

什么是形参?

形参(parameter):

全称为”形式参数” 由于它不是实际存在变量,所以又称虚拟变量

是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.

在调用函数时,实参将赋值给形参。

因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。

提到形参,那就要提一下实参

什么是实参?

实参(argument):

全称为”实际参数”是在调用时传递给函数的参数.

实参可以是常量、变量、表达式、函数等,

无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。

因此应预先用赋值,输入等办法使实参获得确定值。

各类参数概念的关系是?

  • 实参
    • 全局变量
    • 局部变量
  • 形参
    • 局部变量

可见,这些参数的概念之间没有很清晰的界限。不能以形参、实参来对全局变量、局部变量进行分类。

因为他们的本质是指不同的东西。全局、局部变量指的是scope作用域,而实参、形参指的是 “真实性”…

maybe他们在内存分配与释放上有所不同~

if、for作用域:

    if contents, err := ioutil.ReadFile(filename); err != nil{
        fmt.Println(err)
    } else {
        fmt.Printf("%s\n", contents)
    }
    // 在此处contents就无法正常引用了
}

if 和 for 这些控制结构,而在这些结构中声明的变量的作用域只在相应的代码块内。


why

作用域的好处是?

不要scope作用域这个概念行不行?

我猜测的是,好处可能就是在使用完局部变量之后,可以立即释放出空间出来。


how

如何判断局部变量的作用域:

一般情况下,局部变量的作用域可以通过代码块(用大括号括起来的部分)判断


when&where

什么时候用全局变量?

换句话说,什么时候要让 Variable declared outside of any function (in other words at the top level) 然后让这个 Variablehave global (or package) scope??

当你希望这个变量在other package 能被共用吧,有点像java里面的publicprivate 的概念。


who

谁第一个提出scope这个概念的?

-c-


refs:


imagination:

A variable (constant, type, function) is only known in a certain range of the program, called the scope.

Variables etc. declared outside of any function (in other words at the top level) have global (or package) scope: they are visible and available in all source files of the package.

Variables declared in a function have local scope: they are only known in that function.

局部变量就好像是在学校里的学生卡一样,只有你学校的人认可且知道你的学生卡,所以你的学生卡的作用域比较小,只能在学校范围内使用。

全局变量就像每个人的身份证。身份证的作用比学生证的作用大多了,可使用的范围也大很多。

形参感觉范围就更小了,只在函数定义中使用,就好像那种发抽奖用的临时小卡片一样。


expansion

  • 实参、形参的真正不同?内存分配?
  • 编程语言中,不要scope作用域这个概念行不行?为什么要有这个概念?局部变量可以提前释放空间?
  • java里面的publicprivate???
  • 谁第一个提出scope这个概念的?

inspire

感觉任何编程语言的一些概念,都有一个更deep的含义,是因为某种需要才这样设计的,才会有这些语法。

所以,maybe 有时间要去看看 how to build a language~

嗯嗯。。编译原理。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值