03-Golang局部变量和全局变量

栏目: C · 发布时间: 7年前

局部变量

  • C语言 中写在{}中或者函数中或者函数的形参, 就是局部变量
  • Go语言中的局部变量和C语言一样

全局变量

  • 在C语言中写在函数外面的就是全局变量
  • Go语言中的全局变量和C语言一样

局部变量和全局变量的作用域

  • 在C语言中局部变量的作用域是从定义的那一行开始, 直到遇到 } 结束或者遇到return为止
  • Go语言中局部变量的作用域和C语言一样
  • 在C语言中全局变量的作用域是从定义的那一行开始, 直到文件末尾为止
  • Go语言中的全局变量, 只要定义了, 在定义之前和定义之后都可以使用

局部变量和全局变量的生命周期

  • 在C语言中局部变量, 只有执行了才会分配存储空间, 只要离开作用域就会自动释放, C语言的局部变量存储在栈区
  • Go语言局部变量的生命周期和C语言一样
  • 在C语言中全局变量, 只要程序一启动就会分配存储空间, 只有程序关闭才会释放存储空间, C语言的全局变量存储在静态区(数据区)
  • Go语言全局变量的生命周期和C语言一样

局部变量和全局变量的注意点

  • 在C语言中相同的作用域内, 不能出现同名的局部变量
  • Go语言和C语言一样, 相同干的作用域内, 不能出现同名的局部变量
package main
import "fmt"
func main() {
    var num int; // 局部变量
    //var num int; // 报错,不能出现同名局部变量
}
  • 在C语言中相同的作用域内, 可以出现同名的全局变量
  • Go 语言中相同的作用域内, 不能出现同名的全局变量
    例:
package main
import "fmt"
var value int // 全局变量
//var value int // 报错,不能出现同名全局变量
func main() {
}

特殊点

  • 在C语言中 局部变量 没有初始化存储的是垃圾数据, 在Go语言中局部变量没有初始化, 会默认初始化为0
  • 在C语言中 全局变量 没有初始化存储的是0, Go语言和C语言一样
  • 在Go语言中, 如果定义了一个 局部变量 , 但是没有使用这个局部变量, 编译会报错
  • 在Go语言中, 如果定义了一个 全局变量 , 但是没有使用这个全局变量, 编译不会报错

注意点

  • 相同的作用域内, 无论是全局变量还是局部变量, 都不能出现同名的变量
  • 变量离开作用域就不能使用
  • 局部变量如果没有使用, 编译会报错, 全局变量如果没有使用, 编译不会报错
  • :=只能用于局部变量, 不能用于全局变量
num := 666  //只能用于局部变量
fmt.Printf("%d\n", num)
  • :=如果用于同时定义多个变量, 会有退化赋值现象,如果通过:=定义多个变量, 但是多个变量中有的变量已经在前面定义过了, 那么只会对没有定义过的变量执行:=, 而定义过的变量只执行=操作
num2 := 123
num2, value2 := 456, 789
fmt.Printf("%d, %d", num2, value2)        //456, 789

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

爆裂

爆裂

[美] 伊藤穰一、[美] 杰夫·豪 / 张培、吴建英、周卓斌 / 中信出版集团 / 2017-9-1 / 65.00元

越是在发生重大改变的时刻,越是会出现两极分化,赢家、输家有时只在一念间。未来已经装上了全新的操作系统。这是一个重大升级,对我们而言,随之而来的则是陡峭的学习曲线。在指数时代,替换旧逻辑,我们的思维亟需与世界对接,推翻过去已经成为大众所接受的常识,学会差异化思考才能屹立不倒,不被卷入历史的洪流。 在《爆裂》一书中,伊藤穰一和杰夫·豪将这一逻辑提炼为9大原则,帮助人们驾驭这一动荡时刻,应对当下的......一起来看看 《爆裂》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具