为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 函数指针作为结构的一部分

Golang 函数指针作为结构的一部分

Go
白猪掌柜的 2021-06-30 09:00:47
我有以下代码: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}MyFWriter := new(FWriter)MyFWriter.WriteF = MyWriteFunction// I want to use MyWriteFunction with io.Copyio.Copy(MyFWriter,os.Stdin)我想要做的是创建一个 Writer 接口来包装,MyWriteFunction因为它没有命名为“Write”,我不能将它用于任何需要“Writer”接口的东西。此代码将无法正常工作,因为它会抱怨:方法 MyWriterFunction 不是表达式,必须调用我在这里做错了什么?我怎样才能设置WriteF为MyWriteFunction?注意:我尽可能地简化了这个问题,实际上我有一个结构体,它有MyWriteFunction一个普通的 Write 函数,所以它变得有点复杂......(如果有更好的方法来解决我的这个问题,那么我会很高兴听到的!)
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您的代码中有一个错字,但无论如何都没有必要将 func 包装到结构中。相反,您可以只定义一个包装函数的 WriteFunc 类型,并且您可以在其上定义一个 Write 方法。这是一个完整的例子。


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"))

}


查看完整回答
反对 回复 2021-07-12
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

修复MyWriterFunction/MyWriteFunction错字。例如,


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)

}


查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 286 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信