2 回答
TA贡献1853条经验 获得超9个赞
在创建 db 时,我通常喜欢遵循 Ben Johnson 的本指南: 请参阅 3. Wrap types for application-specific context
这篇文章提到我们可以通过与接口交互在这里提供一个抽象层,所以你不需要在应用层泄露这些细节。您提到您想要执行查询和其他命令,以便您可以针对这些命令绘制一个界面,如下所示:
type Mysql struct {
db *sql.DB
}
// Wrap a new connection into the MySql struct
func NewMysql() (*Mysql, error) {
db, err := sql.Open(...)
return &Mysql{ db }, err
}
func (m *Mysql) GetUsers(...) ([]User, error) {}
func (m *Mysql) CreateUsers(...) (User, error) {}
type UserStore interface {
GetUsers func(...) []User, error)
CreateUsers func(...) (User, error)
}
TA贡献1829条经验 获得超4个赞
这绝对是不正确的:
MySqlDatabase
没有实现IMySqlDatabase
,所以如果你真的尝试使用该接口,它将无法工作你实际上并没有使用界面
并且有风格问题:
接口返回具体类型,这违背了目的
界面似乎是自己的工厂?或者其他的东西?目前还不清楚接口或具体类型应该是/做什么
Go 中的接口不应该被命名
IThing
,那是 C#您似乎有修改全局变量的类型方法,这对于任何使用它们的人来说都是非常出乎意料的
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报