go 语言 对指针类型接收者本身赋值

r 是指针类型接收者,可以对其进行解引赋值。结构体的0值不是nil,而是其各个成员的0值

package main

import "fmt"

func main() {
	newReader()
}

type reader struct {
	buf  []byte
	r, w int
}

func newReader() {
	r := new(reader)
	fmt.Println(r) // &{[] 0 0}
	r.reset(make([]byte, 5))
	fmt.Println(r) // &{[0 0 0 0 0] -1 -1}
}

func (r *reader) reset(buf []byte) {
	*r = reader{buf: buf, r: -1, w: -1}
}