各种数据类型的零值

package main

import "fmt"

type InterfaceDemo interface {
   Foo(args ...any) any
}

type Human struct {
   Name   string // 姓名
   Gender string // 性别
   Age    int    // 年龄
}

func main() {
   var varInt int
   fmt.Printf("int的零值是:%#v \n", varInt) // int的零值是:0

   var varInt32 int32
   fmt.Printf("int32的零值是:%#v \n", varInt32) // int32的零值是:0

   var varInt64 int64
   fmt.Printf("int64的零值是:%#v \n", varInt64) // int64的零值是:0

   var varFloat32 float32
   fmt.Printf("float32的零值是:%#v \n", varFloat32) // float32的零值是:0

   var varFloat64 float64
   fmt.Printf("float64的零值是:%#v \n", varFloat64) // float64的零值是:0

   var varString string
   fmt.Printf("string的零值是:%#v \n", varString) // string的零值是:""

   var varBool bool
   fmt.Printf("bool的零值是:%#v \n", varBool) // bool的零值是:false

   var varAny any
   fmt.Printf("any的零值是:%#v \n", varAny) // any的零值是:<nil>

   var varArrayInt [5]int
   fmt.Printf("int数组的零值是:%#v \n", varArrayInt) // int数组的零值是:[5]int{0, 0, 0, 0, 0}

   var varArrayString [5]string
   fmt.Printf("string数组的零值是:%#v \n", varArrayString) // string数组的零值是:[5]string{"", "", "", "", ""}

   var varArrayBool [5]bool
   fmt.Printf("bool数组的零值是:%#v \n", varArrayBool) // bool数组的零值是:[5]bool{false, false, false, false, false}

   var varPointerInt *int
   fmt.Printf("*int的零值是:%#v \n", varPointerInt) // *int的零值是:(*int)(nil)

   var varPointerString *string
   fmt.Printf("*string的零值是:%#v \n", varPointerString) // *string的零值是:(*string)(nil)

   var varMap map[string]any
   fmt.Printf("map[string]any的零值是:%#v \n", varMap) // map[string]any的零值是:map[string]interface {}(nil)

   var varChanString chan string
   fmt.Printf("chan string的零值是:%#v \n", varChanString) // chan string的零值是:(chan string)(nil)

   var varSliceString []string
   fmt.Printf("[]string的零值是:%#v \n", varSliceString) // []string的零值是:[]string(nil)

   var varSliceByte []byte
   fmt.Printf("[]byte的零值是:%#v \n", varSliceByte) // []byte的零值是:[]byte(nil)

   var varInterface InterfaceDemo
   fmt.Printf("interface的零值是:%#v \n", varInterface) // interface的零值是:<nil>

   var varHuman Human
   fmt.Printf("结构体的零值是:%#v \n", varHuman) // 结构体的零值是:main.Human{Name:"", Gender:"", Age:0}

   var varFunc func(num1 int, num2 int) (sum int)
   fmt.Printf("func的零值是:%#v \n", varFunc) // func的零值是:(func(int, int) int)(nil)
}

//========== 总结 ==========//
// any的零值是nil。
// 指针的零值是nil。
// map的零值是nil。
// chan的零值是nil。
// interface的零值是nil。
// 切片的零值是nil。
// func的零值是nil。
// 数组的零值不是nil,它会用其元素的零值去填充所有元素。
// 结构体的零值不是nil,它的属性的值就是每个属性的零值。

Copyright © 2024 码农人生. All Rights Reserved