在 Go 中重新分配方法

假设我有以下内容:


package main


import "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 中的等价物是什么?


四季花海
浏览 161回答 1
1回答

慕神8447489

您不能为接口分配函数,您可以为结构分配函数,例如: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{}})}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go