Postgresql 事务中的单insert语句

Postgresql 事务中的单insert语句,postgresql,api,go,transactions,Postgresql,Api,Go,Transactions,我正在为Golang的后端项目创建一些API,并从github获得了一些示例 我找到了Exitus(),它是一个简单的API,带有一些基本的CRUD,例如在问题中带有注释,它们有获取、创建、更新、列出 而Get、Update、List则使用单一查询,如 db.QueryContext(ctx, "SELECT id, content, created_at, updated_at FROM comments "+query, args...) 但使用insert,它们在事务

我正在为Golang的后端项目创建一些API,并从github获得了一些示例

我找到了Exitus(),它是一个简单的API,带有一些基本的CRUD,例如在
问题中带有
注释
,它们有
获取、创建、更新、列出

Get、Update、List
则使用单一查询,如

db.QueryContext(ctx, "SELECT id, content, created_at, updated_at FROM comments "+query, args...)
但使用insert,它们在事务中封装一条insert语句,如下所示

err := db.WithTransaction(ctx, cs.dbconn, func(tx db.Transaction) error {
    return tx.QueryRowContext(
        ctx, qry.Query(query, qry.Args()...,).Scan(&comment.Id, &comment.Content, &comment.CreatedAt, &comment.UpdatedAt)
以下是
with transaction
功能:

func WithTransaction(ctx context.Context, db *sql.DB, fn TxFn) (err error) {
tx, err := db.BeginTx(ctx, nil)
if err != nil {
    return
}
defer func() {
    if err != nil {
        rollErr := tx.Rollback()
        if rollErr != nil {
            err = multierror.Append(err, rollErr)
        }
        return
    }
    err = tx.Commit()
}()

err = fn(tx)
return
}


那么,在事务中包装单insert语句有什么意义呢?

围绕单insert使用事务并不是最有用的。但是,它们正在传递一个函数
fn TxFn
,该函数可能包含一组复杂的(sql)语句,使给定的结构更有用