为什么Go将值0返回到未分配的整数变量?

Yas*_*nik 1 go

我被要求将整数类型的变量声明为:

var someInteger int8
Run Code Online (Sandbox Code Playgroud)

稍后,当我打印此变量时,它将打印值0

我的Go程序如下所示:

package main

import "fmt"

func main() {
  var someInteger int
  fmt.Println(someInteger)      // Prints 0 in terminal
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,因为我没有分配任何值,所以它应该返回一些垃圾值(C),而不是像静态变量那样表现出来,后者会自动由值0初始化。

icz*_*cza 10

在Go中,您无法访问未初始化的变量/内存。如果未显式初始化变量,则它将隐式初始化为该类型的零值。

规格:变量声明中对此进行了介绍

如果给出了一个表达式列表,则变量将按照赋值规则使用表达式进行初始化。否则,将每个变量初始化为其零值

规格:变量中也提到了

如果尚未为变量分配值,则其值为该类型的零值

并且在“ 围棋之旅:零值 ”中也有介绍,如果您正在学习该语言,我强烈建议您采用“ 零值”

声明时没有明确的初始值的变量将被赋予零值。