interface - 指向实现相同接口(interface)的不同结构的指针数组

标签 interface polymorphism go

我想做的是:我有几种结构类型,都实现了相同的接口(interface),声明了一个方法,比如“Process()”

type Worker interface {
  Process()
}

type obj1 struct {
}

func (o *obj1) Process() {
}

// same with struct type obj2, obj3, ...

在整个代码中,我创建了这些结构的多个实例,然后我想在每个实例上调用该过程。对每个调用 Process() 都可以正常工作。

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 完成这类事情,如果可以,我该如何实现它?

最佳答案

您不需要制作指向接口(interface)的指针的 objs 数组。接口(interface)是引用值。

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

或在这里查看:http://play.golang.org/p/eWXiZzrN-W

关于interface - 指向实现相同接口(interface)的不同结构的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17077074/

相关文章:

java - 抛出接口(interface)中未定义的异常

java - 扩展另一个类的变量不可见性

mysql - Golang 在 Struct 属性中使用小写首字母

go - 使用 io.WriteString 时可执行文件提前退出

go - 收集实时 GC 指标 - Golang

java - 只有常量的接口(interface)

Java:非空方法作为映射值

c# - 如何在不使用反射的情况下获取类中指定类型的所有属性

java - 在 Java 中使用三角括号内的 "extends"和类型 "T"

java - Jackson 反序列化多态类而不是数组