Golang 中定义不同类型的变量,不是通过声明就是通过 make 或 new 。 未显式初始化时,将被赋予一个默认值,该默认值便为该类型的零值。不同的类型有不同的零值。
类型 | 类型名 | 零值 |
---|---|---|
字符类型 | byte, rune | 0 |
数值类型 | float32, float64, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, complex64, complex128 | 0 |
布尔类型 | bool | false |
字符串 | sting | “”(空字符串) |
slice | []TYPE | nil |
map | map[TYPE]TYPE | nil |
指针 | uintptr | nil |
函数 | func | nil |
接口 | interface | nil |
信道 | chan | nil |
其中,TYPE 表示具体的类型。特别地,类型 error 为接口类型,故零值为 nil,其定义如下:
type error interface {
Error() string
}
示例代码:
package main
import (
"fmt"
)
type Student struct {
Sno int //整型(数值类型)
Name string //字符串
Gender bool //布尔类型
Age float32 //浮点型(数值类型)
}
type StudentPrint interface {
Print()
}
func main() {
stu := new(Student)
fmt.Printf("stu=%+v\n", stu)
var sliceStudent []Student //切片
var mapStudent map[int]Student //映射
var pStu *Student //指针
fmt.Printf("slice=%v map=%v pointer=%v\n", sliceStudent, mapStudent, pStu)
var ifVar StudentPrint //接口
var funcVar func(str *Student) //函数
var chVar chan Student //信道
fmt.Printf("interface=%v func=%v chan=%v\n", ifVar, funcVar, chVar)
}
运行结果:
stu=&{Sno:0 Name: Gender:false Age:0}
slice=[] map=map[] pointer=<nil>
interface=<nil> func=<nil> chan=<nil>
参考文献
[1] Go编程语言规范.零值
[2] Package builtin
[3] golang–数据类型