Interface 指向实现同一接口的不同结构的指针数组
我要做的是:我有几个结构类型,都实现了相同的接口,它们声明了一个方法,比如“Process() 在整个代码中,我创建了这些结构的几个实例,然后我想对每个结构调用流程。对每个进程调用Process()可以正常工作Interface 指向实现同一接口的不同结构的指针数组,interface,polymorphism,go,Interface,Polymorphism,Go,我要做的是:我有几个结构类型,都实现了相同的接口,它们声明了一个方法,比如“Process() 在整个代码中,我创建了这些结构的几个实例,然后我想对每个结构调用流程。对每个进程调用Process()可以正常工作 o1 := obj1.New() o2 := obj1.New() o3 := obj2.New() o4 := obj3.New() // ... o1.Process() o2.Process() // ... 现在,我想要一个“ProcessAll()”函数,它将接收这些实例,并
o1 := obj1.New()
o2 := obj1.New()
o3 := obj2.New()
o4 := obj3.New()
// ...
o1.Process()
o2.Process()
// ...
现在,我想要一个“ProcessAll()”函数,它将接收这些实例,并对每个实例调用Process()方法,以及围绕它的一些元工作
以下是我试图生成的代码类型,但这段代码不起作用,因为我不确定如何执行:
func ProcessAll(objs []*Worker) {
for _, obj := range objs {
obj.Process()
}
}
ProcessAll([]*Worker{o1, o2, /* ... */})
使用go是否可以完成这类事情,如果可以,我该如何实现它?您不需要创建指向接口的指针objs数组。接口是参考值
package main
import "fmt"
type Worker interface{
Process()
}
type obj1 struct {
}
func (o *obj1) Process() {
fmt.Println("obj1 Process()")
}
type obj2 struct {
}
func (o *obj2) Process() {
fmt.Println("obj2 Process()")
}
func ProcessAll(objs []Worker) {
for _, o := range objs {
o.Process()
}
}
func main() {
ProcessAll([]Worker{ &obj1{}, &obj2{} })
}
或者在这里查看:更进一步,当类型实现接口时,其指针类型也会实现接口
package main
import "fmt"
type Worker interface{
Process()
}
type obj1 struct {
}
func (o *obj1) Process() {
fmt.Println("obj1 Process()")
}
type obj2 struct {
}
func (o *obj2) Process() {
fmt.Println("obj2 Process()")
}
func ProcessAll(objs []Worker) {
for _, o := range objs {
o.Process()
}
}
func main() {
ProcessAll([]Worker{ &obj1{}, &obj2{} })
}