登录
首页 >  Golang >  Go问答

带有接收器的函数类

来源:stackoverflow

时间:2024-03-25 22:36:32 463浏览 收藏

在 Go 中,可以声明一个带有接收者的函数作为类型。这本质上就是方法。方法类型将接收者作为其第一个参数,然后可以将其作为常规函数调用,其参数与方法相同,并以作为方法接收者的附加参数为前缀。

问题内容

如何声明一个带有接收者的函数作为类型?

我以为我能够执行以下操作,但它抱怨语法错误:

type myFunc func(s *State) (blah Blah) err

func main() {
    b := &Blah{}
    s := &State{}

    var f = myF
    s.f(b)
}

func (s *State) myF(blah Blah) err {
    ...
}

解决方案


您可以定义一个将接收者作为其第一个参数的函数类型(这本质上就是方法)。

type myfunc func(*state, blah) error

然后您可以使用 method expression 创建该类型的值:

type blah struct{}
type state struct{}

func (s *state) myf(blah) error { return nil }

var f myfunc = (*state).myf

如果 m 位于类型 t 的方法集中,则 t.m 是一个可作为常规函数调用的函数,其参数与 m 相同,并以作为方法接收者的附加参数为前缀。

[...]

表达式

t.mv

产生一个与 mv 等效的函数,但具有显式接收器作为其第一个参数;它有签名

func(tv T, a int) int

到这里,我们也就讲完了《带有接收器的函数类》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>