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

时间:2019-11-01 08:28:10

标签: go

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

var someInteger int8

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

我的转到计划如下:

package main

import "fmt"

func main() {
  var someInteger int
  fmt.Println(someInteger)      // Prints 0 in terminal
}

我的问题是,因为我没有分配任何值,所以它应该返回一些垃圾值,例如 C ,而不是表现为像静态变量那样按值自动初始化的变量 0

2 个答案:

答案 0 :(得分:10)

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

Spec: Variable declarations:

中对此进行了介绍
  

如果给出了一个表达式列表,则按照assignments的规则用表达式初始化变量。否则,每个变量都将初始化为其zero value

也在Spec: Variables:

中提到
  

如果尚未为变量分配值,则其值是其类型的zero value

Go Tour: Zero Values中也有介绍,如果您正在学习该语言,我强烈建议您参加。

  

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

答案 1 :(得分:3)

Go通过根据变量的类型添加合理的默认值来简化此操作。例如:

var someInteger int8         // will print 0 as default
var someFloat float32        // will print 0 as default
var someString string        // will print nothing as it prints empty string
var someBoolean bool         // will print false as default

正如@icza在他的回答中提到的,您可以详细了解here