


The following column will introduce you to these 11 pitfalls that you should avoid falling into when using database/sql. I hope it will be helpful to friends in need!
We are big fans of the Avoid falling into these 11 pitfalls when using database/sql! (Go database) language and its database access librarydatabase/sql. As you can probably see with your own eyes,
is very small in size, but you can do a lot with it. This includes substantial risks of error and deceptive error. This blog post is dedicated to some of the mistakes we’ve made in the past, in the hope that you won’t make the same mistakes again. Common Pitfalls
- Long-lived functions have queries within the loop, and delaying
- rows.Close()
within the loop will cause memory and connection usage to grow without limit.
Open many db - objects.
Please create a global sql.DB
Do not doand do not open a new one for every incoming HTTP request your API server should respond to. Otherwise, you will be opening and closing a lot of TCP connections to the database.
TIME_WAIT State latency, load and TCP connections are heavy. rows.Close() - after the operation is completed.
Forgetting to close the rows variable means a connection leak. Combined with the increasing load on the server, this may mean encountering max_connections
Prepared statement bloat.errors or similar. Please run
rows.Close() as soon as possible, even if it will be used again later (which is also harmless). Chaindb.QueryRow()
and.Scan()
for the same reason. If your code is running with high concurrency, consider whether prepared statements are the right solution, as they may be re-prepared multiple times on different connections when the connection is busy. -
strconv or casts clutter the code.
It is recommended to scan the results into a variable of the type you want and let - .Scan()
do the conversion for you behind the scenes.
Error handling and retries lead to confusing code. Let - database/sql
handle the connection pooling, reconnection and retry logic for you.
Forgot to check for errors after rows.Next() - .
Don't forget, rows.Next()
UseThe loop may exit abnormally.
db.Query() - for non-SELECT queries.
If there is no result set, do not tell Avoid falling into these 11 pitfalls when using database/sql! (Go database) that you wish to iterate over the result set, otherwise the connection will be leaked.
Assume that subsequent statements use the same connection. If two statements are run consecutively, they are likely to be run on two different connections. Run - LOCK TABLES tbl1 WRITE
, then run SELECT * FROM tbl1, and you will most likely block and wait. If you need to ensure that a single statement is used, you need to use the parameter
Access the database while using TX.sql.Tx
. - sql.Tx
is bound to a transaction, but the database is not bound, so accessing it will not participate in a transaction.
Surprised at a NULL - .
You cannot scan a NULL
Original address: https://orangematter.solarwinds.com/2017/03/23/common-pitfalls-when-using-database-sql-in-go/type into a variable unless it is one of the
NullXXX types provided by thedatabase/sql
package (or you make it yourself , or provided by the driver), otherwise. Check your schema carefully, because if a column can beNULL
, then one day it will becomeNULL
, and what works in test may break in production.
The above is the detailed content of Avoid falling into these 11 pitfalls when using database/sql! (Go database). For more information, please follow other related articles on the PHP Chinese website!

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。 换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。 闭包会随着函数的创建而被同时创建。

本篇文章带大家了解一下golang 的几种常用的基本数据类型,如整型,浮点型,字符,字符串,布尔型等,并介绍了一些常用的类型转换操作。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Chinese version
Chinese version, very easy to use

SublimeText3 English version
Recommended: Win version, supports code prompts!

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver CS6
Visual web development tools

WebStorm Mac version
Useful JavaScript development tools