golang,如何满足同一个包中许多文件的界面?

时间:2018-01-24 12:18:53

标签: go interface

我有我的应用程序的逻辑:

myapp/
     |- tables/
              |-table1.go
              |-table2.go
              |-table3.go
      - main.go

在main.go中,我有简单的界面:

type DBInterface interface {
    DataParse(string) string
}

现在,table1,table2,tableN是DB中表的名称。我需要在特定的表上执行特定的操作。因此,在table1.go中我有一个简单的函数,它返回table1.go的解析数据,其余部分返回。

现在,问题是我在main.go函数中有:

func ParseDataFromManyTables(dbs DBInterface) {
    // some actions on tables like: dbs.DataParse("tablename")
    // and these DataParse() are declared in tables/table*.go
}

我想要做的是使用满足每个表/表* .go文件(DataParse())的接口的函数。但问题是 - 这个函数不能在同一个包(这里的表)中重新声明,我能在这里做得更好吗?我知道,我可以创建新的包(目录),但我似乎没有正确的方法....

1 个答案:

答案 0 :(得分:1)

您无法满足具有功能的界面。只有带方法的类型才能满足接口。

要满足接口,您需要声明一个类型,然后在该类型上实现一组与接口方法集的方法签名匹配的方法。

在这种情况下,您可以在每个文件中声明一个类型,并且对于每个类型,实现一个与assign $stdobj1 = new \stdClass(); $stdobj1->id = $our_user['usid'];; 具有相同签名的方法:

DBInterface

ParseData

table1.go

package tables

type Table1 struct{}

func (t Table1) DataParse(s string) string {
    // ...
    return "..."
}

鉴于此示例,您现在可以将table2.gopackage tables type Table2 struct{} func (t Table2) DataParse(s string) string { // ... return "..." } 类型的值传递给Table1