我的应用程序有这样的逻辑:
myapp/
|- tables/
|-table1.go
|-table2.go
|-table3.go
- main.go在main.go中,我有一个简单的界面:
type DBInterface interface {
DataParse(string) string
}现在,table1、table2、tableN是数据库中的表名。我需要在特定表上执行特定的操作。因此,在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())中使用满足接口的函数。但问题是-这个函数不能在相同的包(这里是表格)中重新声明,我可以在这里做得更好吗?我知道,我可能会创建新的包(目录),但我在这里似乎不是正确的方法……
发布于 2018-01-24 20:51:08
您不能用函数来满足接口。只有具有方法的类型才能满足接口。
要满足接口,您需要声明一个类型,然后在该类型上实现一组与接口方法集的方法签名相匹配的方法。
在这种情况下,您可以在每个文件中声明一个类型,并为每个类型实现一个与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或Table2类型的值传递给ParseDataFromManyTables。
https://stackoverflow.com/questions/48422336
复制相似问题