The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
zjttfs

请问 fmt.Fprint(&b, "Hello World") 的值 b 为什么需要加& ???

  •  
  •   zjttfs · Apr 20, 2021 · 1275 views
    This topic created in 1868 days ago, the information mentioned may be changed or developed.

    看到一段代码 :

    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
    }
    

    为什么这里需要传指针?

    不是有 * 符号的时候才需要指针吗?有点懵.

    Microkernel
        1
    Microkernel  
       Apr 20, 2021   ❤️ 1
    bytes.Buffer 是个 struct,io.Writer 是个 interface
    Vegetable
        2
    Vegetable  
       Apr 20, 2021   ❤️ 1
    不知道你具体指的是哪里,fmt.Fprint(&b, "Hello World")这里传地址,是因为实现 Write 方法的是*bytes.Buffer,`func (b *Buffer) Write(p []byte) (n int, err error)`,而不是 bytes.Buffer,所以&b 是 io.Writer,b 不是。
    zjttfs
        3
    zjttfs  
    OP
       Apr 20, 2021
    @Vegetable
    懂了. 我应该去看.
    `bytes.Buffer` 实现的 `Write` 方法.
    这里的`Write`是需要传指针的.
    我跟踪错地方了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3666 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 10:36 · PVG 18:36 · LAX 03:36 · JFK 06:36
    ♥ Do have faith in what you're doing.