Go语言类型推断何时发生?


var (
HOME = os.Getenv("HOME")
USER = os.Getenv("USER")
GOROOT = os.Getenv("GOROOT")
)

这些变量的类型是在编译期间还是在运行时确定的?

Go是一种静态类型语言,所以它必须在编译时发生。

Spec:变量声明:

如果存在类型,则每个变量都被赋予该类型。否则,每个变量在赋值时被赋予相应初始化值的类型。如果该值是无类型常量,则首先将其隐式转换为默认类型;如果它是一个未类型化的布尔值,则首先将其隐式转换为类型bool。预先声明的值nil不能用于初始化没有显式类型的变量。

var d = math.Sin(0.5)  // d is float64
var i = 42             // i is int
var t, ok = x.(T)      // t is T, ok is bool
var n = nil            // illegal

在您的示例中,由于os.Getenv()的返回类型是string,因此所有这些变量都将是string类型。

最新更新