
看到一段代码 :
func main() { var b bytes.Buffer fmt.Fprint(&b, "Hello World") var w io.Writer w = &b fmt.Println(w) } 跟随到 fmt.Fprint
type Writer interface { Write(p []byte) (n int, err error) } func Fprint(w io.Writer, a ...interface{}) (n int, err error) { p := newPrinter() p.doPrint(a) n, err = w.Write(p.buf) p.free() return } 为什么这里需要传指针?
不是有 * 符号的时候才需要指针吗?有点懵.
1 Microkernel 2021-04-20 16:16:02 +08:00 bytes.Buffer 是个 struct,io.Writer 是个 interface |
2 Vegetable 2021-04-20 16:19:29 +08:00 不知道你具体指的是哪里,fmt.Fprint(&b, "Hello World")这里传地址,是因为实现 Write 方法的是*bytes.Buffer,`func (b *Buffer) Write(p []byte) (n int, err error)`,而不是 bytes.Buffer,所以&b 是 io.Writer,b 不是。 |