Go语言-结构体的零值问题

  1. 正文

Pay attention: 结构体类型的 零值 不是 nil

正文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main
import "fmt"

/**
结构体类型的 零值 不是 nil, 如果一个结构体作为字段类型的话,后续对其的零值判断会有小问题

所以一般尽量把结构体类型改为指针的形式,这样既方便做零值判断,又可以减少元素复制带来的开销
*/
type Sub struct {
SubName string
}


/*
注意这里的 Sub 字段类型是一个结构体
*/
type Foo struct {
Sub Sub
Name string
}

/**
注意这里的 Sub 字段类型是一个 结构体类型的指针
*/
type Foo2 struct {
Sub *Sub
Name string
}
func main() {
var foo Foo
// 打印结构体的零值
fmt.Println(foo.Sub) // {}

var foo2 Foo2
// 打印结构体指针的零值
fmt.Println(foo2.Sub) // <nil>

}

文章标题:Go语言-结构体的零值问题

文章字数:204

本文作者:Waterandair

发布时间:2018-11-05, 12:58:50

最后更新:2019-12-28, 14:03:59

原始链接:https://waterandair.github.io/2018-11-05-go-the-zero-value-of-struct-is-not-nil.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

github