假设我有以下内容: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{}})
}
- 1 回答
- 0 关注
- 160 浏览
添加回答
举报
0/150
提交
取消