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

在 Go 中重新分配方法

在 Go 中重新分配方法

Go
四季花海 2021-08-16 20:08:19
假设我有以下内容:package mainimport "fmt"type I1 interface {    m1()}func f1() {    fmt.Println("dosomething")}func main() {    var obj I1    obj.m1 = f1    obj.m1()}这会产生错误./empty.go:16: cannot assign to obj.m1为什么我不能分配给“方法字段”?在 C 中,我可以只传递函数指针。Go 中的等价物是什么?
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

您不能为接口分配函数,您可以为结构分配函数,例如:


type S1 struct {

    m1 func()

}


func f1() {

    fmt.Println("dosomething")

}


func main() {

    var obj S1

    obj.m1 = f1


    obj.m1()

}

// 另一个例子


type I1 interface {

    m1()

}


type S1 struct {}


func (S1) m1() {

    fmt.Println("dosomething")

}


type S2 struct { S1 }


func (s S2) m1() {

    fmt.Println("dosomething-2")

    //s.S1.m1() //uncomment to call the original m1.

}


func doI1(i I1) {

    i.m1()

}


func main() {

    doI1(S1{})

    doI1(S2{S1{}})

}


查看完整回答
反对 回复 2021-08-16
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

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