如何将go方法转换为func?

我有一个将函数作为参数的包级函数(Frob)。对于函数参数,我想传入一个具有特定结构实例的方法(FrobMethod)作为接收者(myFrob)。


我发现完成此操作的唯一方法是使用捕获目标结构的func文字/闭包。这就需要重复func签名和参数,这似乎太冗长了。有没有更好的办法?


package main


import "fmt"


func Frob( frobber func( int ) ( string ) ) {

    fmt.Printf( "Frob %s\n", frobber( 42 ) )

}


type MyFrob struct {

    Prefix string

}


func ( m MyFrob ) FrobMethod( n int ) ( string ) {

    return fmt.Sprintf( "%s %d", m.Prefix, n )

}


func main() {


    myFrob := MyFrob { Prefix: "Hello" }


    // C# allows something like this:

    //

    //Frob( myFrob.FrobMethod )


    Frob( func ( n int ) ( string ) {

        return myFrob.FrobMethod( n )

    } )

}

...一个实际的例子是net / http中的HandleFunc。


温温酱
浏览 262回答 3
3回答

慕后森

从Go 1.1开始,C#风格的方法参考适用于:Frob( myFrob.FrobMethod )请参阅Go语言规范的“方法表达式”部分。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go