首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >golang,如何从同一包中的多个文件中满足接口?

golang,如何从同一包中的多个文件中满足接口?
EN

Stack Overflow用户
提问于 2018-01-24 20:18:53
回答 1查看 334关注 0票数 0

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

代码语言:javascript
复制
myapp/
     |- tables/
              |-table1.go
              |-table2.go
              |-table3.go
      - main.go

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

代码语言:javascript
复制
type DBInterface interface {
    DataParse(string) string
}

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

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

代码语言:javascript
复制
func ParseDataFromManyTables(dbs DBInterface) {
    // some actions on tables like: dbs.DataParse("tablename")
    // and these DataParse() are declared in tables/table*.go
}

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

EN

回答 1

Stack Overflow用户

发布于 2018-01-24 20:51:08

您不能用函数来满足接口。只有具有方法的类型才能满足接口。

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

在这种情况下,您可以在每个文件中声明一个类型,并为每个类型实现一个与DBInterfaceParseData具有相同签名的方法

table1.go

代码语言:javascript
复制
package tables

type Table1 struct{}

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

table2.go

代码语言:javascript
复制
package tables

type Table2 struct{}

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

在本例中,您现在可以将Table1Table2类型的值传递给ParseDataFromManyTables

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48422336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档