分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
在读studygolang 关于数据访问的内容时,一段代码不理解,就是
```go
type Dao struct {
*sql.DB
// 构造sql语句相关
tablename string
where string
whereVal []interface{} // where条件对应中字段对应的值
limit string
order string
// 插入需要
columns []string // 需要插入数据的字段
colValues []interface{} // 需要插入字段对应的值
// 查询需要
selectCols string // 想要查询那些字段,接在SELECT之后,默认为"*"
}
func (this *Dao) Insert() (sql.Result, error) {
strSql := util.InsertSql(this)
logger.Debugln("Insert sql:", strSql)
err := this.Open()
if err != nil {
return nil, err
}
defer this.Close()
stmt, err := this.Prepare(strSql)
if err != nil {
return nil, err
}
defer stmt.Close()
return stmt.Exec(this.ColValues()...)
}
```
此处strSql := util.InsertSql(this) this 是*Dao对象,可是我打开Util的db.go的代码看到的Util是:
```go
type Sqler interface {
Tablename() string
Columns() []string
SelectCols() string // 需要查询哪些字段
GetWhere() string
GetOrder() string
GetLimit() string
}
func InsertSql(sqler Sqler) string {
columns := sqler.Columns()
columnStr := "`" + strings.Join(columns, "`,`") + "`"
placeHolder := strings.Repeat("?,", len(columns))
sql := fmt.Sprintf("INSERT INTO `%s`(%s) VALUES(%s)", sqler.Tablename(), columnStr, placeHolder[:len(placeHolder)-1])
return strings.TrimSpace(sql)
}```
InsertSql 需要的参数是Sqler 两个并不是同一个对象 。这怎么理解
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2303 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传