我有我的应用程序的逻辑:
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())的接口的函数。但问题是 - 这个函数不能在同一个包(这里的表)中重新声明,我能在这里做得更好吗?我知道,我可以创建新的包(目录),但我似乎没有正确的方法....
答案 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.go
或package tables
type Table2 struct{}
func (t Table2) DataParse(s string) string {
// ...
return "..."
}
类型的值传递给Table1
。