type Persion struct {
Name string
Age int
Hobby []string
}
func main() {
var p Persion
fmt.Printf("%#v", p)
}
输出:
main.Persion{Name:"", Age:0, Hobby:[]string(nil)}
结构体的默认值为各成员的零值
切片的零值和append的行为
package main
import "fmt"
func main() {
var stringSli []string
if stringSli == nil {
fmt.Println("stringSli is nil")
}
fmt.Printf("stringSli is %#v\n", stringSli)
stringSli2 := append(stringSli, []string{"hello", "world"}...)
fmt.Printf("stringSli is %#v, stringScli2 is %#v\n", stringSli, stringSli2)
}
输出:
stringSli is nil
stringSli is []string(nil)
stringSli is []string(nil), stringScli2 is []string{"hello", "world"}
切片的零值是nil。使用append函数,可以给零值sclie追加元素最佳元素。
If it has sufficient capacity, the destination is resliced to accommodate the new elements. If it does not, a new underlying array will be allocated.
零值切片的len和cap为0,append会动态生成一个底层数组,来容纳追加的元素
channel的零值
channel的零值也为nil
package main
import "fmt"
func main() {
var ch chan int
if ch == nil {
fmt.Printf("ch is %#v", ch)
}
}
golang的零值
golang中的变量未显式初始化时,会赋予一个默认的零值
常见类型零值
自定义结构体类型的零值
输出:
结构体的默认值为各成员的零值
切片的零值和append的行为
输出:
切片的零值是nil。使用append函数,可以给零值sclie追加元素最佳元素。
If it has sufficient capacity, the destination is resliced to accommodate the new elements. If it does not, a new underlying array will be allocated.
零值切片的len
和cap
为0,append会动态生成一个底层数组,来容纳追加的元素channel的零值
channel的零值也为nil
所以使用channel的时候,最好使用make函数显示初始化, 除非我们知道自己在做什么