有人要求我将整数类型的变量声明为:
var someInteger int8
稍后我打印此变量时,它会打印值0
。
我的转到计划如下:
package main
import "fmt"
func main() {
var someInteger int
fmt.Println(someInteger) // Prints 0 in terminal
}
我的问题是,因为我没有分配任何值,所以它应该返回一些垃圾值,例如 C ,而不是表现为像静态变量那样按值自动初始化的变量 0 。
答案 0 :(得分:10)
在Go中,您无法访问未初始化的变量/内存。如果未显式初始化变量,则它将隐式初始化为该类型的零值。
中对此进行了介绍中提到如果给出了一个表达式列表,则按照assignments的规则用表达式初始化变量。否则,每个变量都将初始化为其zero value。
如果尚未为变量分配值,则其值是其类型的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