小编jtu*_*uki的帖子

golang sql driver的准备声明

关于golang的sql驱动程序,下面两个语句有什么区别?

// store.DB is *sql.DB type
rows, err := store.DB.Query(SQL, args ...)
// err != nil
defer rows.Close()
Run Code Online (Sandbox Code Playgroud)

// store.DB is *sql.DB type
stmt, err := store.DB.Prepare(SQL)
// err != nil
defer stmt.Close()

rows, err := stmt.Query(args ...)
// err != nil
defer rows.Close()
Run Code Online (Sandbox Code Playgroud)

看来他们是一样的?有什么微妙的区别吗?

更新:

我们不需要执行很多stmt.Execstmt.Query之后db.Prepare,只需要执行一次execquery在每次之后执行prepare.当我们使用db.Queryor时db.Exec,我们将参数传递给方法而不是使用原始SQL字符串(出于安全考虑).

我找到了一个参考链接:http://go-database-sql.org/prepared.html
似乎两种方式都使用预处理语句,有什么区别?

mysql go

17
推荐指数
1
解决办法
9587
查看次数

在golang的zlib/reader.go文件中,"r.(flate.Reader)"是什么意思?

r.(flate.Reader)在golang的zlib/reader.go文件中找到了很多代码片段.这是什么意思?
https://golang.org/src/compress/zlib/reader.go

func (z *reader) Reset(r io.Reader, dict []byte) error {
    if fr, ok := r.(flate.Reader); ok {
        z.r = fr
    } else {
        z.r = bufio.NewReader(r)
    }
    // more code omitted ...
}
Run Code Online (Sandbox Code Playgroud)

PS的源代码ioflate.
io:https:
//golang.org/src/io/io.go flate:https://golang.org/src/compress/flate/inflate.go

go

2
推荐指数
1
解决办法
116
查看次数

标签 统计

go ×2

mysql ×1