Golang我怎样才能不让SQL查询进入我的代码?
我一直在努力决定组织sql查询和代码的最佳方式 现在,我的包中有一个Golang我怎样才能不让SQL查询进入我的代码?,sql,go,Sql,Go,我一直在努力决定组织sql查询和代码的最佳方式 现在,我的包中有一个models/文件夹,其中包含我的所有表,每个表都位于它们自己的.go文件中,其中包含一个与数据库表匹配的结构 我一直在把我的代码弄得一团糟,因为我在代码中加入了大量的sqlQueries,特别是对于事务之类的东西 如何准确地构造代码,而不使用SQL查询 (我不想使用ORM来实现这一点)您可以实现类似于ORM的东西 EAA目录中的示例: 在围棋中: model/person.go type Person struct {
models/
文件夹,其中包含我的所有表,每个表都位于它们自己的.go
文件中,其中包含一个与数据库表匹配的结构
我一直在把我的代码弄得一团糟,因为我在代码中加入了大量的sqlQueries,特别是对于事务之类的东西
如何准确地构造代码,而不使用SQL查询
(我不想使用ORM来实现这一点)您可以实现类似于ORM的东西 EAA目录中的示例: 在围棋中: model/person.go
type Person struct {
Lastname string
Firstname string
Dependents int
}
package mapper
import m "whatever/model"
type PersonMap struct { }
func (m *PersonMap) Insert(p *m.Person) error {
// SQL query
return nil
}
func (m *PersonMap) Update(p *m.Person) error {
// SQL query
return nil
}
func (m *PersonMap) Delete(p *m.Person) error {
// SQL query
return nil
}
mapper/person.go
type Person struct {
Lastname string
Firstname string
Dependents int
}
package mapper
import m "whatever/model"
type PersonMap struct { }
func (m *PersonMap) Insert(p *m.Person) error {
// SQL query
return nil
}
func (m *PersonMap) Update(p *m.Person) error {
// SQL query
return nil
}
func (m *PersonMap) Delete(p *m.Person) error {
// SQL query
return nil
}
然而,这一解决办法只是解决办法的一部分。关于数据库事务,我认为您应该从另一个“层”对它们进行管理。将它们作为存储和模型分开,就像它们在这里所做的那样。使用存储过程如何?通常,内联SQL被认为是非常糟糕的做法,这不仅是因为代码清晰,而且还因为当您使用
fm.Sprintf
之类的东西来形成查询字符串时,您没有保护自己不受SQL注入的影响。另外,请查看sql包中的Prepare
,它返回一个*Stmt
,您可以随意重用它。您可以尝试:解析文件并将sql查询与映射关联。用于将SQL与代码逻辑分离。您还可以查看drone存储库的实现:这不是一个具体的golang问题。但有些扩展可能会有所帮助,例如Sqlx: