内容简介:Imagine if you had the power to rewrite the notoriousWhat would it look like?It would look like the all-new
A replacement for database/sql
Apr 13 ·2min read
Imagine if you had the power to rewrite the notorious database/sql
package so that it was friendlier, simpler and less verbose.
What would it look like?
It would look like the all-new dbq
package
. Version 2.2 was just released with so many bells and whistles that you’ll never directly use the database/sql
package again.
A small subset of the features are showcased below. Also read to the end to see the new direction of the package.
Zero boilerplate code
You can execute simple queries in 8 lines instead of 30. And it comes with built-in unmarshaling.
The contrast speaks for itself.
Flatten Query Args
You have a []string
with a list of query arguments that you want to inject into a query without SQL-injection issues. You can feel the irritation building up.
func (db *DB) Query(query string, args ...interface{})
Unfortunately, args
only accepts interface{}
so you need to superfluously iterate over the entire []string
to
copy
the values into a []interface{}
. It makes your code look like Wuhan 2 months back.
dbq
has your back.
All slices are flattened automatically . No questions asked.
Mission-critical queries
What if you have a query that HAS TO SUCCEED . Failure is not an option®.
dbq has built-in retry capabilities so it will continue to attempt your query with exponentially increasing intervals.
Transaction management
What about transactions? Got you covered.
dbq.Tx(ctx, db, func(tx interface{}, ..., txCommit dbq.TxCommit) { res, err := E(ctx, "exec statement")
if err != nil {
return // Automatic rollback
}
txCommit()})
You can have an arbitrarily complex database operation happening within a transaction without having to worry about rolling-back ON every SINGLE sad PATH. Just commit at the end.
Finally, THIS IS YOUR PACKAGE
The x
subpackage houses custom query helper functions that are general xor MySQL/PostgreSQL specific.
You are welcome to submit PR’s with whatever custom functions you want. As long as you leave the core package pristine, and your code compiles and is well documented, then it’ll be welcomed with open arms.
As a warm-up, I’ve included a BulkUpdate
function which allows you to update thousands of rows with 1 query without a transaction!
Stay safe boys and girls.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
极致:互联网时代的产品设计
戴维•罗斯 / 中信出版集团 / 2016-6 / 49.00元
在不远的未来,日常物品将能够迅速理解我们的需求,改善我们的生活,并随处可见。为了实现这一预期,我们需要能够发现用户使用产品的场景,找到用户高频刚需痛点的产品设计者。 站在下一个转型发展的悬崖上,我们看到技术将更具人性。随着物联网的发展,我们习以为常的数百件日常物品:汽车、钱包、手表、雨伞甚至垃圾桶,都将回应我们的需求,了解我们,学习为我们思考。最先出现的智能硬件为什么是智能手环、无人驾驶汽车......一起来看看 《极致:互联网时代的产品设计》 这本书的介绍吧!