Golang 使用接口实现数据库函数

对不起,有些愚蠢的问题,但我有点卡住了。


所以,我正在为我的应用程序在数据库驱动程序之上实现包装器,我需要尽可能地保持它的可移植性。我决定接口非常适合这项任务。因此,我的数据库结构包含一些变量和特定于应用程序的方法,以及两个接口函数:


query(request string) error

flush() int? string?? struct?? slice????, error

现在你可能得到了主要问题。如何返回“flush()”类型不知道的数据?我可以通过接口返回它吗,如果可以,如何处理?


第二个问题很基本,但我仍然不清楚。所以,我有这个数据库结构,它有两种方法,旨在由包用户实现以使用他想要的数据库驱动程序。

我怎么写它以及未来的实现会是什么样子(有一个关于 go 之旅的例子,但它是关于具有类似方法的不同结构的接口)

希望你能帮助我理解:)


不负相思意
浏览 131回答 1
1回答

素胚勾勒不出你

是的,flush 就可以有签名;flush() interface{}, error你如何实施?像这样具有合理方法体的东西应该为你做;type MyDbDriver struct {     //fields}func (d *MyDbDriver) query(request string) error {     return nil}func (d *MyDbDriver) flush() interface{}, error {      return nil, nil}在 Go 中,所有接口实现都是隐式的,这意味着,如果您的类型具有与接口签名匹配的方法,那么您已经实现了它。不需要像public class MyType: IMyInterface, IThisIsntCSharp. 请注意,在上面的示例中*MyDbDriver已经实现了您的接口,但MyDbDriver还没有。编辑:下面是一些伪调用代码;e := driver.query("select * from thatTable where ThatProperty = 'ThatValue'")if e != nil {    return nil, e}i, err := driver.flush()if err != nil {     return nil, err}MyConcreteInstance := i.(MyConcreteType)// note that this will panic if the type of i is not MyConcreteType// that can be avoided with the familiar object, err calling syntaxMyConcreteIntance, ok := i.(MyConcreteType)if !ok {      // the type of i was not MyConcreteType :\}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go