gpt4 book ai didi

go - 在 Go 中重新分配方法

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:21 26 4
gpt4 key购买 nike

假设我有以下内容:

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

最佳答案

你不能把一个函数赋值给一个接口(interface),你可以为一个结构赋值,例如:

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{}})
}

play

关于go - 在 Go 中重新分配方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26051389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com