Golang function pointer as a part of a struct

前端 未结 2 992
夕颜
夕颜 2021-01-31 19:41

I have the following code:

type FWriter struct {
    WriteF func(p []byte) (n int,err error)
}

func (self *FWriter) Write(p []byte) (n int, err error) {
    ret         


        
相关标签:
2条回答
  • 2021-01-31 20:22

    Fix MyWriterFunction/MyWriteFunction typo. For example,

    package main
    
    import (
        "fmt"
        "io"
        "os"
    )
    
    type FWriter struct {
        WriteF func(p []byte) (n int, err error)
    }
    
    func (self *FWriter) Write(p []byte) (n int, err error) {
        return self.WriteF(p)
    }
    
    func MyWriteFunction(p []byte) (n int, err error) {
        // this function implements the Writer interface but is not named "Write"
        fmt.Print("%v", p)
        return len(p), nil
    }
    
    func main() {
        MyFWriter := new(FWriter)
        MyFWriter.WriteF = MyWriteFunction
        // I want to use MyWriteFunction with io.Copy
        io.Copy(MyFWriter, os.Stdin)
    }
    
    0 讨论(0)
  • 2021-01-31 20:31

    There's a typo in your code, but wrapping the func into a struct is unnecessary anyway. Instead, you can just define a WriteFunc type that wraps a function, and that you can define a Write method on. Here's a full example.

    package main
    
    import (
        "fmt"
        "io"
        "strings"
    )
    
    type WriteFunc func(p []byte) (n int, err error)
    
    func (wf WriteFunc) Write(p []byte) (n int, err error) {
        return wf(p)
    }
    
    func myWrite(p []byte) (n int, err error) {
        fmt.Print("%v", p)
        return len(p), nil
    }
    
    func main() {
        io.Copy(WriteFunc(myWrite), strings.NewReader("Hello world"))
    }
    
    0 讨论(0)
提交回复
热议问题