变量、常量

159 阅读2分钟

一、变量

1.声明

1.1 一般形式

var 变量名 变量类型
  • var:声明变量的关键字
  • 变量名:变量的名字,标识符
  • 变量类型:变量存储的数据类型

1.2 物理实现

定义变量后,就在内存中开辟了一个空间,至于空间占用多大,由变量类型决定。空间的别名叫“变量名”

image.png

1.3 编译器自动推断

  • 类型推导(保留 var,省略类型):var 变量名 = 初始化值,任何地方都能用(包级、函数内),比如 var x = 10
  • 短变量声明(省略 var 和类型,用 :=):变量名 := 初始化值,只能在函数内用,比如 y := "abc"

2.赋值

  • 一般格式 var 变量名 变量类型 = 值
  • 简洁格式 例如 a := "喵"(有限制,只能在函数内部使用) 批量定义

3.上手操作

image.png

image.png

image.png

4.使用类型

4.1 值类型

值类型变量通常存储在栈中,尤其是当它们是局部变量时。当值类型变量的值需要在函数作用域之外使用时,Go 会将其分配到堆内存中。初始内存:[[juejin.cn/post/756954…]]

4.2 引用类型

一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。这种变量又称之为指针

二、常量

是初始化变量后一个不可改变的值,关键字const

作用:

  • 避免“魔法值”,增强可读性
  • 执行编译期优化

限制:只能定义底层类型为布尔型、数字型(整数型、浮点型和复数)和字符串型。

iota

特殊常量,可以认为是一个可以被编译器修改的常量

image.png

下图实例来自:菜鸟编程 image.png

三、作用域

变量生效的区域

范围划分:

  • 代码块:如果变量定义在此,只在{ }包裹的内部有效
  • 局部:函数内部声明的变量
  • 全局:函数外部声明的变量,在当前包;首字母大写,所有包有效