nil in Golang

就像是有特定类型的nullptr 可比较性点击此处

  1. nilnil 不可比较
  2. 不同类型的 nil 地址一样

类型为 nil 与 值为 nil

一个包含nil指针的接口不是nil接口

参考 https://book.itsfun.top/gopl-zh/ch7/ch7-05.htmlopen in new window 7.5.1.

package site

import (
	"bytes"
	"io"
)

const debug = true

func main() {
	var buf *bytes.Buffer
	if debug {
		buf = new(bytes.Buffer) // enable collection of output
	}
	f(buf) // NOTE: subtly incorrect!
	if debug {
		// ...use buf...
	}
}

// If out is non-nil, output will be written to it.
func f(out io.Writer) {
	// type of out : *bytes.Buffer
	// value of out : nil
	if out != nil {
		out.Write([]byte("done!\n")) // panic here maybe
	}
}
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

对于接口类型而言 包含了两个部分:类型 与 值

nil&interface

reference