变量

Variables 变量

原文:https://go.dev/ref/spec#Variables

​ 变量是用于保存值的存储位置。允许值的集合是由变量的类型决定的。

变量声明 、函数参数和结果、函数声明函数字面量的签名为指定的变量保留存储空间。调用内置函数new或获取复合字面量的地址会在运行时为变量分配存储空间。这样的匿名变量是通过(可能是隐式的)指针间接引用的。

数组切片结构体等类型的结构化变量具有可以被单独寻址的元素和字段。每个这样的元素都像一个变量。

​ 变量的静态类型(或仅仅是类型)是在其声明中给出的类型、在new调用或复合字面量中提供的类型、或是结构化变量的元素的类型。接口类型的变量也有一个独特的动态类型,它是运行时分配给变量的值的(非接口)类型(除非该值是预先声明的标识符nil,它没有类型)。在执行过程中,动态类型可能会发生变化,但是存储在接口变量中的值总是可以赋给变量的静态类型。

1
2
3
4
var x interface{}  // x is nil and has static type interface{}  => x 为 nil,具有静态类型 interface{}
var v *T           // v has value nil, static type *T =>  v 具有值 nil,静态类型 * T
x = 42             // x has value 42 and dynamic type int =>  x 具有值42,动态类型 int
x = v              // x has value (*T)(nil) and dynamic type *T => x 具有值(* T)(nil)和动态类型 * T

​ 变量的值是通过在表达式中引用该变量来检索的;它是最近分配给该变量的值。如果一个变量还没有被赋值,它的值就是其类型的零值