go变量作用域与PHP变量作用域的区别

bloger 2019-11-08 AM 2554℃ 0条

一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。
u=3740549217,3714870243&fm=26&gp=0.jpg
回顾一下PHP的变量,PHP变量作用域有三种:

  1. 局部 函数内声明的变量,只能在变量内使用
  2. 全局 在函数外声明的变量 ,只能在变量外使用
  3. 静态 通常,当函数完成/执行后,会删除所有变量 不过,有时需要不删除某个局部变量。实现这一点需要更进一步的工作。要完成这一点,首次声明变量时使用 static 关键词

Go语言中的变量分为三种类型,分别是

  1. 局部变量 如果变量声明在函数体内部,则被称为局部变量
  2. 全局变量 如果变量在函数体外声明,则被称为全局变量
  3. 和形式参数 形式参数则是在函数定义中函数名右边小括号(参数列表)中的变量

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

package main

import (
    "fmt"
)

func main() {
    //声明局部变量 a 和 b 并赋值
    a := 1
    b := 2
    //声明局部变量 c 并计算 a 和 b 的和
    c := a + b
    fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
}

运行结果如下所示:

a = 1, b = 2, c = 3

上述代码种a,b,c都是局部变量,要注意的是:=只能在函数内部使用

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

package main

import "fmt"

//声明全局变量
var c int

func main() {
    //声明局部变量
    var a, b int

    //初始化参数
    a = 1
    b = 2
    c = a + b

    fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
}

运行结果如下所示:

a = 1, b = 2, c = 3

可以看到c = a + b,c作为全局变量在函数内部可以直接使用。

package main

import "fmt"

//声明全局变量
var a float32 = 3.14

func main() {
    //声明局部变量
    var a int = 3

    fmt.Printf("a = %d\n", a)
}

运行结果如下所示:

a = 3

形式参数
形式参数会作为函数的局部变量来使用。

package main

import (
    "fmt"
)

//全局变量 a
var a int = 13

func main() {
    //局部变量 a 和 b
    var a int = 3
    var b int = 4

    fmt.Printf("main() 函数中 a = %d\n", a)
    fmt.Printf("main() 函数中 b = %d\n", b)
    c := sum(a, b)
    fmt.Printf("main() 函数中 c = %d\n", c)
}

//这里的a,b就是形式参数
func sum(a, b int) int {
    fmt.Printf("sum() 函数中 a = %d\n", a)
    fmt.Printf("sum() 函数中 b = %d\n", b)
    num := a + b
    return num
}

运行结果如下所示:

main() 函数中 a = 3
main() 函数中 b = 4
sum() 函数中 a = 3
sum() 函数中 b = 4
main() 函数中 c = 7

总体来说程序的的思想有共同之处,变脸之间的差距不大,go和php变量的作用域差不多一样,知识表现形式略有不同。

标签: 变量

非特殊说明,本博所有文章均为博主原创。

评论啦~