go语言变量的零值和nil

Go语言中无论是全局变量还是局部变量,只要定义了一个变量都有默认的0值
int/int8/int16/int32/int64/uint/uint8/uint16/uint32/uint64/byte/rune/uintptr的默认值是0
float32/float64的默认值是0.0
bool的默认值是false
string的默认值是""
pointer/function/interface/slice/channel/map/error的默认值是nil
其它复合类型array/struct默认值是内部数据类型的默认值

package main
import "fmt"
func main() {
	var intV int // 整型变量
	var floatV float32 // 实型变量
	var boolV bool // 布尔型变量
	var stringV string // 字符串变量
	var pointerV *int // 指针变量
	var funcV func(int, int)int // function变量
	var interfaceV interface{} // 接口变量
	var sliceV []int // 切片变量
	var channelV chan int // channel变量
	var mapV map[string]string // map变量
	var errorV error // error变量

	fmt.Println("int = ", intV) // 0
	fmt.Println("float = ", floatV) // 0
	fmt.Println("bool = ", boolV) // false
	fmt.Println("string = ", stringV) // ""
	fmt.Println("pointer = ", pointerV) // nil
	fmt.Println("func = ", funcV) // nil
	fmt.Println("interface = ", interfaceV) // nil
	fmt.Println("slice = ", sliceV) // []
	fmt.Println("slice = ", sliceV == nil) // true
	fmt.Println("channel = ", channelV) // nil
	fmt.Println("map = ", mapV) // map[]
	fmt.Println("map = ", mapV == nil) // true
	fmt.Println("error = ", errorV) // nil

	var arraryV [3]int // 数组变量
	type Person struct{
		name string
		age int
	}
	var structV Person // 结构体变量
	fmt.Println("arrary = ", arraryV) // [0, 0, 0]
	fmt.Println("struct = ", structV) // {"" 0}
}
posted @ 2021-12-30 11:21  我在路上回头看  阅读(250)  评论(0编辑  收藏  举报